jcmd 是 JDK 1.7+ 自带的轻量级诊断工具,可无需重启进程直接统计 JVM 启动参数(VM.flags)、系统属性(VM.system_properties)、动态标志状态等运行时变量配置,比 jinfo 更简洁、比 jps+jstat+jstack 组合更统一。

是 JDK 1.7+ 自带的轻量级诊断工具,统计运行时 JVM 变量配置(即启动参数、系统属性、VM 标志等)无需重启进程,也不依赖外部工具。它比 jinfo 更简洁,比 jps + jstat + jstack 组合更统一。 以下是你能直接用、马上见效的实战路径:
一、快速列出所有 Java 进程 PID
不需额外命令,jcmd 本身就能完成:
jcmd
输出示例:
12345 com.example.OrderService
67890 org.apache.catalina.startup.Bootstrap
记下目标进程 ID(如 12345),后续所有操作都基于它。
二、查看 JVM 启动时的全部命令行参数(-Xms/-Xmx/-XX:... 等)
这是最常查的“变量配置”,等价于 jinfo -flags,但更原生:
jcmd 12345 VM.flags
输出包含:
• 所有显式指定的 JVM 参数(如 -Xms2g -Xmx2g -XX:+UseG1GC)
• 隐式启用的默认参数(如 -XX:+UseCompressedOops)
• 被覆盖或禁用的参数(标有 manageable 或 default)
⚠️ 注意:部分参数(如 -XX:MaxDirectMemorySize)若未显式设置,可能不会出现在 flags 列表中,需结合 VM.system_properties 或 VM.native_memory 辅助确认。
三、获取完整系统属性与环境变量
包括 -Dkey=value、Java 版本、OS 类型、编码、用户目录等:
jcmd 12345 VM.system_properties
常见关键项举例:
• java.version=17.0.2
• user.timezone=Asia/Shanghai
• spring.profiles.active=prod
• server.port=8080
这个命令输出的是运行时实际生效值,比看启动脚本更可靠——尤其当参数通过容器环境变量或 Spring Boot 外部配置动态注入时。
四、检查可动态修改的 JVM 参数状态
某些 -XX: 参数支持运行时调整(如 GC 日志开关、JIT 编译控制),可用以下命令确认是否启用及当前值:
jcmd 12345 VM.flag PrintGCDetails
jcmd 12345 VM.flag UseG1GC
输出格式为:
PrintGCDetails = true {product}
UseG1GC = true {product}
其中 {product} 表示该参数是 JVM 产品级默认启用;{manageable} 表示支持运行时修改(可用 jcmd
五、一键导出全部配置到文件(便于归档/比对)
把关键信息一次性保存,适合巡检或故障复盘:
jcmd 12345 VM.flags > jvm-flags-12345.txt
jcmd 12345 VM.system_properties >> jvm-props-12345.txt
后续可用 diff 对比不同时间点的配置变化,快速定位是否因参数误改引发问题。










