版本
- 适用于 JDK 24 的 GraalVM(最新)
- 适用于 JDK 25 的 GraalVM(早期访问)
- 适用于 JDK 21 的 GraalVM
- 适用于 JDK 17 的 GraalVM
- 存档
- 开发构建
Java 诊断命令 (jcmd) 与 Native Image
Native Image 现已支持 Java 诊断命令 (jcmd
),使用户能够使用与 Java 应用程序相同的 jcmd
工具与原生可执行文件交互。此支持补充了现有的 Native Image 监控功能,包括 JDK Flight Recorder、堆转储和原生内存跟踪。
启用 jcmd
支持 #
jcmd
支持默认禁用,必须在构建时显式启用。
使用 --enable-monitoring=jcmd
选项构建启用 jcmd
的原生可执行文件。
native-image --enable-monitoring=jcmd YourApplication
启用 jcmd
支持时,您可能还希望包含其他监控功能,例如 JDK Flight Recorder 或堆转储。在 Native Image 构建过程中包含多个监控功能可以解锁在运行时访问更多诊断命令。例如
native-image --enable-monitoring=jcmd,jfr,heapdump YourApplication
要在运行时使用 jcmd
,请照常启动您的原生可执行文件并获取其进程 ID (PID)。有了 PID,您可以使用 jcmd
连接到正在运行的原生应用程序。例如,要列出特定可执行文件的可用命令,请运行:jcmd <pid> help
。
jcmd 388454 help
388454:
The following commands are available:
GC.heap_dump
GC.run
JFR.start
JFR.stop
JFR.check
JFR.dump
Thread.dump_to_file
Thread.print
VM.command_line
VM.native_memory
VM.system_properties
VM.uptime
VM.version
help
For more information about a specific command use 'help <command>'.
您可能会发现同时启用 jvmstat
监控功能很有用,这样您的原生可执行文件就可以通过 jcmd -l
或不带任何参数的 jcmd
命令被发现和列出。
native-image --enable-monitoring=jcmd,jvmstat YourApplication
jcmd -l
1455557 YourApplication
1455667 jdk.jcmd/sun.tools.jcmd.JCmd -l
支持的诊断命令 #
支持以下键值对:
名称 | 包含在 --enable-monitoring= 中 |
描述 |
---|---|---|
Compiler.dump_code_cache | 仅在使用 Truffle 运行时编译时可用 | 打印代码缓存中所有已编译方法的信息。 |
GC.heap_dump | heapdump | 生成 Java 堆的 HPROF 格式转储。 |
GC.run | 始终可用 | 调用 java.lang.System.gc() 。 |
JFR.start | jfr | 启动新的 JFR 录制。 |
JFR.stop | jfr | 停止 JFR 录制。 |
JFR.check | jfr | 检查正在运行的 JFR 录制。 |
JFR.dump | jfr | 将 JFR 录制内容复制到文件。必须指定名称或录制 ID。 |
Thread.dump_to_file | 始终可用 | 将带有堆栈跟踪的线程转储到纯文本或 JSON 格式的文件中。 |
Thread.print | 始终可用 | 打印所有带有堆栈跟踪的线程。 |
VM.command_line | 始终可用 | 打印用于启动此 VM 实例的命令行。 |
VM.native_memory | nmt | 打印原生内存使用情况。 |
VM.system_properties | 始终可用 | 打印系统属性。 |
VM.uptime | 始终可用 | 打印 VM 运行时长。 |
VM.version | 始终可用 | 打印 JVM 版本信息。 |
help | 始终可用 | 显示帮助信息。 |
性能 #
为 Native Image 添加 jcmd
支持对应用程序空闲时的性能影响很小。然而,性能影响因使用的诊断命令及其调用频率而异。例如,触发多次垃圾回收将比转储单个原生内存跟踪报告产生更大的开销。您可以使用 jcmd <pid> help <command>
打印特定命令的帮助信息,其中也列出了其预期的性能影响。
限制 #
目前,此功能在 Windows 上不可用。