一、前提
- Mycat 是 Java 进程,JDK 自带
jconsole.exe(Windows)或jconsole(Linux) - 服务器上必须装 JDK(不是只装 JRE)
- 知道 Mycat 进程 PID
二、本地监控(Mycat 和 JConsole 在同一台机器)
1. 找到 Mycat 进程 PID
bash
运行
jps -l
会看到:
plaintext
12345 io.mycat.MycatServer
2. 启动 JConsole
- Windows:
jdk/bin/jconsole.exe - Linux:直接输入
bash运行
jconsole
3. 连接 Mycat
打开后会列出本地 Java 进程:
选择:
plaintext
io.mycat.MycatServer
点击 连接 → 选择 不安全连接(无需证书)
4. 成功进入监控面板
你能看到 6 大模块:
- 概述:CPU、堆内存、线程、类
- 内存:堆 / 非堆使用、GC 曲线
- 线程:线程数、死锁检测
- 类:加载类数量
- VM 摘要:JVM 参数、启动参数
- MBean:Mycat 内部状态(连接池、后端节点等)
三、远程监控(最常用:JConsole 在本地,Mycat 在服务器)
步骤 1:修改 Mycat 启动参数,开启 JMX
Mycat 的 JVM 参数在:
plaintext
mycat/conf/wrapper.conf
找到
wrapper.java.additional 开头的行,在后面追加:plaintext
wrapper.java.additional.10=-Dcom.sun.management.jmxremote
wrapper.java.additional.11=-Dcom.sun.management.jmxremote.port=10003
wrapper.java.additional.12=-Dcom.sun.management.jmxremote.authenticate=false
wrapper.java.additional.13=-Dcom.sun.management.jmxremote.ssl=false
wrapper.java.additional.14=-Djava.rmi.server.hostname=你的服务器IP
注意:
10003是 JMX 端口,自己随便定hostname必须写服务器外网 / 内网 IP,不能写 127.0.0.1- 防火墙 / 安全组必须开放 10003 端口
步骤 2:重启 Mycat
bash
运行
./mycat stop
./mycat start
步骤 3:本地 JConsole 远程连接
打开 JConsole → 选择 远程进程
输入:
plaintext
服务器IP:10003`
用户名密码留空 → 连接 → 不安全连接 → 进入监控。
四、JConsole 监控 Mycat 重点看什么(实用版)
1. 内存面板(最重要)
- 堆内存 Heap:是否持续上涨不回落
上涨不回落 = 内存泄漏
- GC 时间曲线:频繁尖刺 = GC 频繁,需要调优
2. 线程面板
- 线程数是否稳定(Mycat 一般几百很正常)
- 点击 检测死锁
出现死锁 = Mycat 假死、查询卡住
3. VM 摘要
查看 Mycat 实际启动的 JVM 参数:
- Xms/Xmx
- 使用的 GC 算法
- 启动类路径
4. MBean(Mycat 内部状态)
路径:
plaintext
com.mycat → MycatServer
可以看到:
- 前端连接数
- 后端连接池状态
- dataNode 状态
- 慢 SQL 统计
- 路由次数
五、常见问题
1. 远程连接失败
- 端口没开(10003)
- hostname 写的 127.0.0.1
- 服务器防火墙拦截
- JDK 版本不兼容
2. 看不到 Mycat 进程
- 用
jps看不到 → 权限不足 - 解决:用 root 启动 jps /jconsole
3. 连接提示 “不安全”
直接点 不安全连接 即可,不影响监控。
六、最简单总结
- 本地:
jconsole直接选 Mycat 进程 - 远程:wrapper.conf 加 5 行 JMX 参数,开放端口
- 重点看:堆内存、GC、线程死锁、MBean