Mycat 是 Java 进程,JDK 自带 5 个核心命令行工具就能全覆盖监控:jps、jstat、jmap、jstack、jhat,不用装任何额外软件,纯命令行就能排查 CPU 高、内存泄漏、频繁 GC、线程卡死、死锁。
一、第一步:找到 Mycat 进程 PID
1. 查所有 Java 进程
bash
运行
jps -l
输出示例:
plaintext
23456 io.mycat.MycatServer
记下 PID:23456,下面所有命令都用这个 PID。
2. 过滤只看 Mycat
bash
运行
jps -l | grep MycatServer
二、jstat:实时监控 GC、内存、线程(最常用)
1. 监控 GC 垃圾回收(重点必看)
bash
运行
jstat -gcutil 23456 1000
1000:每 1 秒刷新一次字段含义:
S0/S1/E/O:新生代、老年代内存使用率YGC/YGCT:年轻 GC 次数、累计耗时FGC/FGCT:Full GC 次数、累计耗时GCT:总 GC 耗时
判断标准
- FGC 持续上涨 → 内存泄漏 / 堆太小
- FGCT 很高 → 接口卡顿、Mycat 响应慢
- O 老年代占用一直 90%+ → 必调优
2. 查看内存容量与分配
bash
运行
jstat -gc 23456 1000
3. 查看线程数量
bash
运行
jstat -thread 23456
三、jmap:监控堆内存、对象占用、导出堆快照
1. 查看 Mycat 堆内存整体配置
bash
运行
jmap -heap 23456
能看到:
- Xms/Xmx 堆大小
- 新生代 / 老年代分配
- 使用的垃圾收集器 G1/Parallel
2. 查看哪些对象占用内存最多
bash
运行
jmap -histo:live 23456 | head -30
- 看实例数、占用内存大小
- 发现某类对象无限增长 → 内存泄漏
3. 导出堆 Dump 文件(OOM、内存暴涨必用)
bash
运行
jmap -dump:format=b,file=mycat_heap.hprof 23456
导出后可用 MAT、VisualVM 打开分析泄漏根源。
四、jstack:监控线程、卡死、死锁
1. 导出全部线程堆栈
bash
运行
jstack 23456 > mycat_thread.log
2. 检测线程死锁
bash
运行
jstack -l 23456
搜索关键字:
Found one Java-level deadlock出现就是死锁BLOCKED大量阻塞线程WAITING大量等待线程 → 连接池耗尽、SQL 阻塞
3. 配合 top 查最耗 CPU 线程
- 看 Mycat 整体 CPU
bash
运行
top -p 23456
- 看内部哪个线程 CPU 最高
bash
运行
top -H -p 23456
拿到线程 ID 后,转十六进制,去 jstack 日志里搜,定位代码阻塞点。
五、jcmd:全能合集工具(替代上面所有)
一条命令看 GC、线程、内存、VM 信息:
bash
运行
# 列出所有可执行命令
jcmd 23456 help
# 打印线程堆栈
jcmd 23456 Thread.print
# 查看 GC 状态
jcmd 23456 GC.info
# 生成堆快照
jcmd 23456 GC.heap_dump mycat_dump.hprof
六、Mycat 常见故障 JVM 排查套路
- Mycat 响应慢、卡顿
jstat -gcutil看是否频繁 FullGC
- CPU 占用飙高
top -H -p PID+jstack定位高 CPU 线程
- 内存持续涨、不释放
jmap -histo看对象增长,导出 hprof 分析
- 连接卡死、假死
jstack查 BLOCKED、死锁、线程池耗尽
七、日常运维推荐常备命令
把 PID 换成你实际的即可:
bash
运行
# 实时看GC
jstat -gcutil 23456 1000
# 看堆配置
jmap -heap 23456
# 查线程死锁
jstack -l 23456