前言
在jdk1.7之后,jdk命令家族新增了一个特牛的命令:jcmd,它是一个多功能的根据,汇集了jps、jmap、jstack、jinfo、jstat等多个命令的功能,也就是我们之前要使用多个JVM命令才能达到的目的,现在只需要使用一个jcmd命令即可。
- jcmd <pid | main class> <command … | PerfCounter.print | -f file>
- pid:Java进程ID
- main class:Java进程的main类,main类名称可以使用通配符,如果正在运行的进程中有多个进程的main类名称相同,则会将诊断命令请求发送到所有的命中进程中
- command:诊断指令参数,可以通过
jcmd pid help
查看进程支持的参数 - PerfCounter.print:打印Java进程上可用的性能计数器,该计数器的列表会随着Java进程的不同而发生变化
- -f file:从文件file中读取命令并在目标Java进程上执行这些命令。在文件中,每个命令必须单独的写在一行里,以
#
开头的行会被忽略,当所有行都被调用完毕之后,或者读取到stop命令,将会终止对file的处理
- -l:列出JVM进程
- -h:显示帮助信息
示例
-
jcmd -l
查看当前机器上所有的jvm进程信息,与
jps -l
、jcmd
命令效果一样 -
jcmd pid PerfCounter.print
查看指定进程的性能统计信息,相当于
jstat -J-Djstat.showUnsupported=true -snap pid
效果一样 -
jcmd pid help
查看指定进程支持的操作参数
-
jcmd pid help command
查看指定命令的帮助信息
-
jcmd pid VM.uptime
查看虚拟机的运行时长
-
jcmd pid VM.classloader_stats
查看类加载器信息,等同于
jmap -clstats
命令 -
jcmd pid Thread.print
打印Java进程的线程信息,与
jstack
效果一样 -
jcmd pid GC.class_histogram
查看进程中的类统计信息,与
jmap -histo
效果一样 -
jcmd pid GC.heap_dump filepath
生成堆转储文件,与
jmap -dump:format=b,file=a.hprof
效果一样 -
jcmd pid GC.heap_info
查看JVM的堆信息,与
jmap -heap
效果一样 -
jcmd pid GC.finalizer_info
查看正在等待回收的对象信息,与
jmap -finalizerinfo
效果一样 -
jcmd pid GC.run
告诉垃圾收集器进行垃圾收集,等于是对JVM执行了
System.gc()
-
jcmd pid VM.version
查看JVM当前版本,和
jinfo pid | grep version
效果一样 -
jcmd pid VM.system_properties
查看JVM系统属性信息,和
jinfo
效果一样 -
jcmd pid VM.flags
查看JVM的启动参数,与
jinfo -flags
效果一样