jcmd 是 JDK 自带的多功能命令行工具(JDK 7+ 内置,无需额外安装),整合了 jps、jstat、jmap、jstack、jinfo 等传统工具的核心功能,支持实时诊断、性能数据采集、JVM 配置调整等操作,且通过 PID 或主类名定位目标 JVM 进程,使用更简洁、功能更全面。
一、jcmd 核心优势
- 功能整合:替代 jps(进程查询)、jstat(性能统计)、jmap(内存快照)、jstack(线程 Dump)、jinfo(配置查询),减少工具切换成本;
- 无侵入性:多数命令(如性能统计、配置查询)不影响 JVM 运行,仅部分命令(如内存 Dump)会短暂占用资源;
- 支持动态调整:可在线修改 JVM 可动态配置的参数(无需重启应用);
- 跨平台:Windows、Linux、macOS 通用,命令格式一致。
二、前置条件
- 安装 JDK(JRE 不含 jcmd,需确保 JDK 的
bin目录加入系统环境变量); - 执行 jcmd 的用户需与目标 JVM 进程的用户一致(或拥有管理员/root 权限);
- 目标 JVM 进程处于运行状态(仅对本地进程有效,远程进程需配合 JMX)。
三、基础用法
jcmd 的核心语法:
jcmd [选项] <PID|主类名> <命令> [命令参数]
<PID|主类名>:指定目标 JVM 进程(可用jcmd -l查看所有进程);<命令>:jcmd 支持的具体操作(如查询进程、Dump 内存、查看线程等);- 若省略
<PID|主类名>和<命令>,仅执行jcmd,效果等同于jps(列出所有本地 JVM 进程)。
四、常用命令详解
1. 查看本地所有 JVM 进程(替代 jps)
命令:
jcmd -l # -l 显示 PID + 主类名(完整路径)
jcmd # 简写,仅显示 PID + 主类名(简洁版)
示例输出:
1234 com.alibaba.dubbo.container.Main # PID=1234,主类为 Dubbo 容器
5678 org.springframework.boot.loader.JarLauncher # PID=5678,Spring Boot 应用
用途:快速定位目标应用的 PID(后续所有命令需依赖 PID)。
2. 查看 jcmd 支持的所有命令(帮助文档)
命令:
jcmd <PID> help # 查看指定进程支持的所有 jcmd 命令
jcmd <PID> help <命令> # 查看某个具体命令的用法(如 help GC.heap_dump)

