jcmd 是 jdk 7+ 自带的多功能命令行工具,整合 jps、jstat、jmap、jstack、jinfo 功能,支持进程查询、性能统计、内存快照、线程 dump 和 jvm 配置动态调整,通过 pid 或主类名定位目标进程,跨平台且无侵入性。

Java 开发者每天都要和 JDK 自带的命令行工具打交道,比如查进程、看堆内存、导出堆快照、分析线程死锁——这些操作一旦卡在 GUI 工具或 IDE 插件里,就容易误判问题根源。掌握原生命令,才能绕过表层封装直击 JVM 底层状态。
查 Java 进程:用 jps 快速定位 PID
第一步:打开终端(Windows 用 CMD 或 PowerShell,macOS/Linux 用 Terminal),直接输入:
jps
这会列出当前用户所有 Java 进程的 PID 和主类名,例如:
12345 MyApp
67890 org.jetbrains.idea.Main
如果只想要纯数字 PID(比如配合 kill 命令),加 -q 参数:
jps -q
【注意:jps 默认不显示系统级 Java 进程(如被 root 启动的服务),也不跨用户可见】
监控 JVM 运行时指标:jstat 实时看 GC 和内存分布
方法一:查看指定进程的垃圾回收统计(每 1 秒刷新一次,共 5 次)
jstat -gc 【PID】 1000 5
方法二:一次性输出完整内存区使用情况(含 Eden、Survivor、Old、Metaspace)
jstat -gc -h5 【PID】
输出字段中,S0U/S1U 表示两个 Survivor 区已用容量,EU 是 Eden 区已用,OU 是老年代已用,MU 是 Metaspace 已用——这些值持续上涨且 GC 频繁,大概率是内存泄漏信号。
方法三:用 -t 加上时间戳列,方便比对长时间运行趋势:
jstat -gc -t 【PID】 5000
抓取堆内存快照:jmap 生成 heap dump 文件
第一步:确认目标进程 PID(用 jps 查)
第二步:执行命令生成二进制 heap dump 文件:
jmap -dump:format=b,file=heap.hprof 【PID】
这个操作会触发一次 Full GC,并把整个堆内存镜像写入当前目录的 heap.hprof 文件。文件体积通常很大,【务必确保磁盘剩余空间 ≥ 当前堆最大值(-Xmx 设置值)】
如果只想看对象统计摘要(不生成文件),用:
jmap -histo 【PID】
输出里排在最前面的几行通常是 java.lang.Class、java.lang.String、byte[] ——若某自定义类实例数异常高,就是重点排查对象。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
分析线程状态与死锁:jstack 抓取线程堆栈
执行:
jstack 【PID】 > thread.log
这会把所有 Java 线程的调用栈、锁持有/等待关系、线程状态(RUNNABLE / BLOCKED / WAITING)全部输出到 thread.log。
如果怀疑死锁,加 -l 参数可显示详细锁信息:
jstack -l 【PID】
输出末尾若有 “Found 1 deadlock.” 字样,紧接着就会列出互相等待的线程及其持有的 monitor 和 waiting to lock 的对象——这是最直接的死锁证据,不用猜。
反编译字节码:javap 查看 class 文件结构
先 cd 到 .class 文件所在目录,再运行:
javap -c ClassName
它会打印出该类每个方法的字节码指令,比如 aload_0、invokespecial、getstatic 等——当你想确认泛型擦除后实际调用哪个方法、或者验证 lambda 是否真生成了内部类,就得靠它。
想看常量池内容(比如字符串字面量、方法签名):
javap -verbose ClassName | head -50
javap 不依赖源码,只要 .class 文件存在就能工作,连没有调试信息的生产包也能拆解。
发送诊断指令给 JVM:jcmd 执行运行时操作
① 查看目标进程支持哪些诊断命令:
jcmd 【PID】 help
② 触发一次堆转储(比 jmap 更轻量,不强制 Full GC):
jcmd 【PID】 VM.native_memory summary
③ 获取当前 JVM 启动参数(含 -Xmx、-XX:+UseG1GC 等):
jcmd 【PID】 VM.command_line
④ 立即执行一次垃圾回收(仅建议在测试环境验证 GC 行为):
jcmd 【PID】 VM.gc
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










