JCMD介绍
The jcmd utility is used to send diagnostic command requests to the JVM, where these requests are useful for controlling Java Flight Recordings, troubleshoot, and diagnose JVM and Java Applications
“JCMD 工具被用来向JVM发送一些诊断命令,这些诊断命令可以用来获取JFR日志、故障排除、诊断JVM和应用程序”
JCMD基本命令
1.概览
可以通过jcmd <process id> help 查看jmcd 支持的命令。如下:
jcmd 15249 help
15249:
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
VM.version
help
如果想了解每个命令的使用,可以执行jcmd <process id> help <command>,如:
jcmd 15249 help VM.version
15249:
VM.version
Print JVM version information.
Impact: Low
Permission: java.util.PropertyPermission(java.vm.version, read)
2.详细介绍
命令 | 说明 | 使用 | 命令执行结果 |
VM.version | 打印hotsspot和jdk信息 | jcmd <process id> VM.version | jcmd 15249 VM.version 15249: Java HotSpot(TM) 64-Bit Server VM version 25.101-b13 JDK 8.0_101 |
VM.system_properties | 打印系统属性 | jcmd <process id> VM.system_properties |
|
VM.flags | 打印JVM配置参数 | jcmd <process id> VM.flags | jcmd 15249 VM.flags 15249: -XX:CICompilerCount=4 -XX:+FlightRecorder -XX:InitialHeapSize=268435456 -XX:MaxHeapSize=734003200 -XX:MaxNewSize=244318208 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=89128960 -XX:OldSize=179306496 -XX:+UnlockCommercialFeatures -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC |
VM.uptime | JVM更新距今时间 | jcmd <process id> VM.uptime | jcmd 15249 VM.uptime 15249: 36799.868 s |
GC.class_histogram | 已图形的方式展示出类分配的实例数量和占用内存情况 | jcmd <process id> GC.class_histogram | jcmd 15249 GC.class_histogram 15249:
num #instances #bytes class name ---------------------------------------------- 1: 729 17004824 [B 2: 15850 1550560 [C 3: 4299 482792 java.lang.Class
|
GC.heap_dump | dump堆日志 | jcmd <process id> GC.heap_dump filename=Myheapdump | jcmd 355 GC.heap_dump /tmp/01.hprof 在tmp目录下生成01.hprof文件 |
Thread.print | 打印线程栈日志 | jcmd <process id> Thread.print |
|
JFR.start | 开始收集jfr文件 | jcmd <process id> JFR.start | jcmd 15249 JFR.start duration=2m delay=10s filename="/tmp/my11.jfr" name="1122" 在jfr启动10s后进行2分钟的日志收集,收集结果的存储路径为/tmp/my11.jfr,文件名为my11.jfr,执行的收集任务名称为1122 |
JFR.check | 检查执行过和正在执行的日志收集任务 | jcmd <process id> JFR.check | jcmd 15249 JFR.check 15249: Recording: recording=2 name="my.jfr" duration=1m filename="/tmp/my.jfr" compress=false (stopped)
Recording: recording=4 name="1122" duration=2m filename="/tmp/my12.jfr" compress=false (running) |
JFR.stop | 停止正在日志收集的任务 | jcmd <process id> JFR.stop | 根据recording 进行停止jcmd 15249 JFR.stop recording=2 根据name进行停止jcmd 15249 JFR.stop name=1122 |
JFR.dump | 停止一个正在执行的日志收集任务,并导出到文件 | jcmd <process id> JFR.dump | jcmd 15249 JFR.dump name="1122" filename="/tmp/1234.dump"
|
VM.native_memory | 输出堆的使用情况 | jcmd <process id> VM.native_memory | jcmd 358 VM.native_memory 358: Native memory tracking is not enabled 原因:未开启开启NMT; 可以用-XX:NativeMemoryTracking=summary开启。
|
VM.check_commercial_features | 检查商业特性是否已开启 | jcmd <process id> VM.check_commercial_features | jcmd 358 VM.check_commercial_features 358: Commercial Features are locked |
VM.unlock_commercial_features | 开启商业特性 | jcmd <process id> VM.unlock_commercial_features | jcmd 358 VM.unlock_commercial_features 358: Commercial Features now unlocked. jcmd 358 VM.check_commercial_features 358: Commercial Features are unlocked. Status of individual features: Java Flight Recorder has not been used. Resource Management is disabled. |
ManagementAgent.start | 创建一个本地和远程服务器通信的连接,建立链接后,可以通过JMC对远程服务器进行实时监控,操作JMX暴漏出来的接口 | jcmd <process id> ManagementAgent.start mxremote.port=port jmxremote.rmi.port=port mxremote.ssl=false jmxremote.authenticate=false | jcmd 358 ManagementAgent.start jmxremote.port=8888 jmxremote.rmi.port=8888 jmxremote.ssl=false jmxremote.authenticate=false 358: Command executed successfully |
ManagementAgent.stop | 终止通信 | jcmd <process id> ManagementAgent.stop | jcmd 358 ManagementAgent.stop 358: Command executed successfully |
ManagementAgent.start_local | 建立一个本地的链接 | jcmd <process id> ManagementAgent.start_local | jcmd 15249 ManagementAgent.start_local 15249: Command executed successfully |
GC.rotate_log | 对GC日志进行切割操作 | jcmd <process id> GC.rotate_log |
|
GC.class_stats | 统计类的相关信息 | jcmd <process id> GC.class_stats | jcmd 15249 GC.class_stats 15249: GC.class_stats command requires -XX:+UnlockDiagnosticVMOptions 需要增加XX:+UnlockDiagnosticVMOptions启动参数 |
GC.run_finalization | 执行一次finalization操作,相当于执行java.lang.System.runFinalization() | jcmd <process id> GC.run_finalization |
|
GC.run | 通知执行一次fullgc操作,但是不一定执行 | jcmd <process id> GC.run | jcmd 358 GC.run 358: Explicit GC is disabled, no GC has been performed 需要设置 -XX:-DisableExplicitGC
|
VM.command_line | 打印JVM命令行参数 | jcmd <process id> VM.command_line |
|