jcmd 是 Java 开发工具包(JDK)中提供的一个多功能工具,它可以用于发送诊断命令请求到 Java 虚拟机(JVM)。这些命令涵盖了从性能监控、线程堆栈跟踪到堆转储等多个方面,使得 jcmd 成为 JVM 管理和性能分析中非常强大的工具。以下是一些 jcmd 的常用功能:

1. 查看 JVM 概要信息

  • VM.version:显示 JVM 的版本信息。
  • VM.flags:显示 JVM 启动时的参数。
  • VM.system_properties:显示 JVM 的系统属性。
  • VM.command_line:显示 JVM 启动时使用的命令行参数。

2. 性能监控

  • VM.uptime:显示 JVM 的运行时间。
  • VM.statistics:显示 JVM 的性能统计信息。

3. 垃圾收集(GC)相关

  • GC.class_histogram:打印出堆中对象的直方图,可以用于分析哪些类的实例占用了较多的内存。
  • GC.run:触发一次垃圾收集。
  • GC.heap_dump:生成堆转储文件,用于后续的内存分析。
  • GC.run_finalization:触发对象的终结过程。

4. 线程相关

  • Thread.print:打印所有线程的堆栈跟踪,这对于分析线程死锁或者查找性能瓶颈非常有用。

5. Java Flight Recorder (JFR) 相关

  • JFR.start:启动一个新的 Java Flight Recorder (JFR) 事件录制。
  • JFR.stop:停止一个 JFR 事件录制。
  • JFR.dump:将当前的 JFR 事件录制数据写入到文件。

6. 动态追踪

  • VM.dynlibs:显示所有动态库的信息。
  • VM.native_memory:显示 JVM 的本地内存使用情况(需要启用本地内存跟踪)。

7. 配置信息

  • VM.set_flag:动态更改 JVM 的某些标志值。

jcmd 提供的命令非常强大,可以帮助开发者和运维人员监控和调试 Java 应用。使用 jcmd 时,首先需要知道目标 Java 进程的进程 ID(PID),然后可以使用 jcmd <PID> <command> 的形式来执行命令。如果不确定可用的命令,可以简单地运行 jcmd <PID> help 来获取支持的命令列表。

在使用 jcmd 进行性能分析和调试时,应当谨慎,特别是在生产环境中,因为某些命令(如生成堆转储)可能会对应用性能产生影响。