一 点睛
在 JDK 1.7 以后,新增了一个命令行工具 jcmd。它是一个多功能的工具,可以用来实现前面除了 jstat 之外所有命令的功能。比如:用它来导出堆、内存使用、查看 Java 进程、导出线程信息、执行 GC、JVM 运行时间等。
官方帮助文档:https://docs.oracle.com/en/java/javase/11/tools/jcmd.html
jcmd 拥有 jmap 的大部分功能,并且在 Oracle 的官方网站上也推荐使用 jcmd 命令代 jmap 命令
jcmd -l:列出所有的 JVM 进程
jcmd 进程号 help:针对指定的进程,列出支持的所有具体命令
jcmd 进程号 具体命令:显示指定进程的指令命令的数据
-
Thread.print 可以替换 jstack 指令
-
GC.class_histogram 可以替换 jmap 中的-histo 操作
-
GC.heap_dump 可以替换 jmap 中的-dump 操作
-
GC.run 可以查看 GC 的执行情况
-
VM.uptime 可以查看程序的总执行时间,可以替换 jstat 指令中的 -t 操作
-
VM.system_properties 可以替换 jinfo -sysprops 进程 id
-
VM.flags 可以获取 JVM 的配置参数信息
二 实战
1 基本使用
# jcmd 单独使用功能类似 jps
E:\JVMDemo3>jcmd
10576
4444 sun.tools.jcmd.JCmd
E:\JVMDemo3>jps
10576
4556 Jps
# jcmd 的帮助
E:\JVMDemo3>jcmd -h
Usage: jcmd <pid | main class> <command ...|PerfCounter.print|-f file>
or: jcmd -l
or: jcmd -h
command must be a valid jcmd command for the selected jvm.
Use the command "help" to see which commands are available.
If the pid is 0, commands will be sent to all Java processes.
The main class argument will be used to match (either partially
or fully) the class used to start Java.
If no options are given, lists Java processes (same as -p).
PerfCounter.print display the counters exposed by this process
-f read and execute commands from the file
-l list JVM processes on the local machine
-h this help
2 jcmd -l——类似 jps 功能
E:\JVMDemo3>jcmd -l
10576
13716 sun.tools.jcmd.JCmd -l
16324 org.jetbrains.jps.cmdline.Launcher D:/ProgramFiles/JetBrains/IDEA/lib/jna.jar;D:/ProgramFiles/JetBrains/IDEA/lib/maven-builder-support-3.6.1.jar;D:/ProgramFiles/JetBrains/IDEA/lib/httpclient-4.5.12.jar;D:/ProgramFiles/JetBrain
s/IDEA/lib/slf4j-api-1.7.25.jar;D:/ProgramFiles/JetBrains/IDEA/plugins/java/lib/jps-builders.jar;D:/ProgramFiles/JetBrains/IDEA/lib/maven-resolver-provider-3.6.1.jar;D:/ProgramFiles/JetBrains/IDEA/lib/lz4-java-1.7.1.jar;D:/ProgramFi
les/JetBrains/IDEA/lib/annotations.jar;D:/ProgramFiles/JetBrains/IDEA/plugins/java/lib/jps-builders-6.jar;D:/ProgramFiles/JetBrains/IDEA/lib/log4j.jar;D:/ProgramFiles/JetBrains/IDEA/lib/maven-resolver-util-1.3.3.jar;D:/ProgramFiles/
JetBrains/IDEA/lib/maven-resolver-impl-1.3.3.jar;D:/ProgramFiles/JetBrains/IDEA/lib/oro-2.0.8.jar;D:/ProgramFiles/JetBrains/IDEA/lib/idea_rt.jar;D:/ProgramFiles/JetBrains/IDEA/lib/plexus-utils-3.2.0.jar;D:/ProgramFiles/JetBrains/IDE
A/lib/netty-buffer-4.1.47.Final.jar;D:/ProgramFiles/JetBrains/IDEA/lib/netty-resolver-4.1.47.Final.jar
8520 chaper02.ThreadDeadLock
3 jcmd pid help——某一进程能使用的命令
E:\JVMDemo3>jcmd 8520 help
8520:
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
VM.classloader_stats
GC.rotate_log
Thread.print
GC.class_stats
GC.class_histogram
GC.heap_dump
GC.finalizer_info
GC.heap_info
GC.run_finalization
GC.run
VM.uptime
VM.dynlibs
VM.flags