JVM命令之jcmd

前言

在jdk1.7之后,jdk命令家族新增了一个特牛的命令:jcmd,它是一个多功能的根据,汇集了jps、jmap、jstack、jinfo、jstat等多个命令的功能,也就是我们之前要使用多个JVM命令才能达到的目的,现在只需要使用一个jcmd命令即可。

image-20200511182956340

  • 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:显示帮助信息

示例

  1. jcmd -l

    查看当前机器上所有的jvm进程信息,与jps -ljcmd命令效果一样

    image-20200511193521904

  2. jcmd pid PerfCounter.print

    查看指定进程的性能统计信息,相当于jstat -J-Djstat.showUnsupported=true -snap pid效果一样

    image-20200511193725364

  3. jcmd pid help

    查看指定进程支持的操作参数

    image-20200511193818369

  4. jcmd pid help command

    查看指定命令的帮助信息

    image-20200511193938227

  5. jcmd pid VM.uptime

    查看虚拟机的运行时长

    image-20200511194101355

  6. jcmd pid VM.classloader_stats

    查看类加载器信息,等同于jmap -clstats命令

    image-20200511194314593

  7. jcmd pid Thread.print

    打印Java进程的线程信息,与jstack效果一样

    image-20200511194510978

  8. jcmd pid GC.class_histogram

    查看进程中的类统计信息,与jmap -histo效果一样

    image-20200511194712997

  9. jcmd pid GC.heap_dump filepath

    生成堆转储文件,与jmap -dump:format=b,file=a.hprof效果一样

    image-20200511194938288

  10. jcmd pid GC.heap_info

    查看JVM的堆信息,与jmap -heap效果一样

    image-20200511195121583

  11. jcmd pid GC.finalizer_info

    查看正在等待回收的对象信息,与jmap -finalizerinfo效果一样

  12. jcmd pid GC.run

    告诉垃圾收集器进行垃圾收集,等于是对JVM执行了System.gc()

  13. jcmd pid VM.version

    查看JVM当前版本,和jinfo pid | grep version效果一样

    image-20200511200800384

  14. jcmd pid VM.system_properties

    查看JVM系统属性信息,和jinfo效果一样

    image-20200511200911867

  15. jcmd pid VM.flags

    查看JVM的启动参数,与jinfo -flags效果一样

    image-20200511202039543