jcmd

jcmd

  发送诊断命令请求到正在运行的Java虚拟机(JVM)。它必须和JVM运行在同一台机器上,并且与启动JVM用户具有相同的组权限。

  • 用法
    1. 列出当前所有运行的 java 进程:jcmd -l|<none>
    2. 列出当前运行的 java 进程可以执行的操作:jcmd PID help
jcmd 664 help
664:
The following commands are available:
JFR.stop
JFR.start
JFR.dump
JFR.check
VM.native_memory
VM.check_commercial_features
VM.unlock_commercial_features
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
GC.rotate_log
Thread.print
GC.class_stats
GC.class_histogram
GC.heap_dump
GC.run_finalization
GC.run
VM.uptime
VM.flags
VM.system_properties
VM.command_line
  1. 参数含义
命令描述
jcmd PID VM.uptime查看 JVM 的启动时长
jcmd PID GC.class_histogram查看 JVM 的类信息,这个可以查看每个类的实例数量和占用空间大小。
jcmd PID Thread.print查看 JVM 的Thread Dump
jcmd PID GC.heap_dump FILE_NAME查看 JVM 的Heap Dump,注意,如果只指定文件名,默认会生成在启动 JVM 的目录里。
jcmd PID VM.system_properties查看 JVM 的属性信息
jcmd PID VM.flags查看 JVM 的启动参数,注意,可以看到 -X 和 -XX 的参数信息
jcmd PID VM.command_line查看 JVM 的启动命令行
jcmd PID GC.run_finalization对 JVM 执行 java.lang.System.runFinalization(),尽量b别去调用这个对象的finalize方法。
jcmd PID GC.run对 JVM 执行 java.lang.System.gc(),告诉垃圾收集器打算进行垃圾收集,而垃圾收集器进不进行收集是不确定的
jcmd PID PerfCounter.print查看 JVM 的性能
### jcmd 命令的功能与使用方法 `jcmd` 是一个强大的命令行工具,专为管理、监控和诊断 Java 进程而设计。它能够向指定的 Java 进程发送诊断命令,从而帮助开发人员深入了解应用程序的状态并进行性能优化或故障排查[^1]。 以下是 `jcmd` 的基本语法及其主要用途: #### 基本语法 ```bash jcmd [options] <pid|main-class> <command>[arguments] ``` - `[options]`: 可选参数,例如 `-l`, `-h`, 或者 `-help`。 - `<pid|main-class>`: 目标 Java 进程的 PID 或主名。 - `<command>[arguments]`: 需要执行的具体命令及其参数。 --- ### 主要功能与常用命令 1. **列出可用命令** 使用以下命令可以查看当前 Java 进程支持的所有诊断命令: ```bash jcmd <pid> help ``` 2. **打印线程堆栈信息** 获取目标进程的线程转储信息,便于分析死锁或其他线程相关问题: ```bash jcmd <pid> Thread.print ``` 此外,还可以将输出保存到文件中以便后续分析: ```bash jcmd <pid> Thread.print > thread_dump.txt ``` 3. **触发垃圾回收** 强制执行 Full GC 并记录相关信息: ```bash jcmd <pid> GC.run ``` 4. **获取内存分配统计** 查看新生代和老年代的对象分配情况: ```bash jcmd <pid> VM.object_stats ``` 5. **启用/停止 Java Flight Recorder 录制** - 启动录制会话: ```bash jcmd <pid> JFR.start name=MyRecording settings=profile duration=60s filename=output.jfr ``` - 停止正在进行的录制会话: ```bash jcmd <pid> JFR.stop name=MyRecording ``` 6. **检查 JVM 性能计数器** 显示有关 CPU 时间、GC 统计数据等方面的指标: ```bash jcmd <pid> PerfCounter.print ``` 7. **查询 JVM 版本信息** 如果需要确认某个进程使用的 JDK 版本号,可通过此命令快速获得: ```bash jcmd <pid> VM.version ``` 8. **导出堆转储文件** 当怀疑存在内存泄漏时,生成一份完整的堆快照供进一步研究: ```bash jcmd <pid> GC.heap_dump /path/to/dump.hprof ``` --- ### 实际案例演示 假设我们需要对一个运行中的 Spring Boot 应用程序(PID 为 12345)进行全面诊断,可以依次执行以下操作: 1. 列出该进程支持的所有命令: ```bash jcmd 12345 help ``` 2. 输出线程转储信息以查找潜在的死锁现象: ```bash jcmd 12345 Thread.print > threads_12345.log ``` 3. 执行一次手动垃圾回收动作,并观察效果: ```bash jcmd 12345 GC.run ``` 4. 开启一段持续时间为 5 分钟的性能采样过程: ```bash jcmd 12345 JFR.start name=SpringBootProfile settings=profile duration=5m filename=springboot_profile.jfr ``` --- ### 注意事项 尽管 `jcmd` 提供了许多有用的功能,但在实际应用过程中仍需注意一些关键点[^4]: - 确保拥有足够的权限访问目标进程; - 对于生产环境中频繁调用某些侵入性强的操作(如强制 GC),可能会引发不必要的性能波动; - 结合实际情况合理选择所需采集的数据量级,以免造成资源浪费。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值