JPSE问题诊断指导三——jcmd功能

jcmd功能被用来发送诊断命令请求道JVM,这些请求对控制Java飞行记录、问题定位、JVM诊断和Java应用很有用,它必须用在JVM运行的同一台机器上面,具有相同高效的用来启动JVM的用户和组标识。

无选项的jcmd命令列举所有本地运行的JVM,包括进程ID和main类的名字。

jcmd -l命令打印所有运行中的用main类和启动命令行参数标识的java进程。

jcmd -h打印使用帮助。

jcmd <pid/main class> help 列举了对指定进程可用的所有诊断命令。

jcmd <pid/main class> PerfCounter.print 打印进程中的所有性能计数器。

jcmd <pid/main class> <command> <options>发送实际的命令到JVM。

对jcmd功能有用的命令

可用的诊断命令可能随着HotSpot VM版本的不同而不同,使用jcmd <pid/main class> help是查看所有可用选项最好的方式。下面是一些JDK8引入的最有用的命令中的一部分,要记住你总是可以使用jcmd <pid/main class> help <command>获取这些命令的任何额外的选项。


  • 打印完整的HotSpot和JDK版本ID:jcmd <pid/main class> VM.version
  • 打印完整的VM系统属性集:jcmd <pid/main class> VM.system+properties
  • 打印VM使用的所有标志:jcmd <pid/main class> VM.flags
  • 打印启动时间(秒):jcmd <pid/main class> VM.uptime
  • 创建类柱状图:jcmd <pid/main class> GC.class_histogram
  • 创建堆柱状图:jcmd <pid/main class> GC.class_histogram filaname=Myheaphistogram,这条命令和jmap -histo <pid>类似,但用推荐这条命令
  • 打印所有线程堆栈:jcmd <pid/main class> Thread.print

jcmd功能的问题定位选项

jcmd功能提供一下问题定位选项:


  • 启动一个记录。例如,在一个以7060标识的运行中的Java进程中启动一个2分钟的记录并保存到当前目录的myrecording.jfr文件中:jcmd 7060 JFR.start name=MyRecording settings=profile delay=20s duration=2m filename=myrecording.jfr
  • 检查一个记录。JFR.check诊断命令检查一个运行中的记录:jcmd 7060 JFR.check
  • 停止一个记录。jcmd 7060 JFR.stop
  • dump一个记录。jcmd 7060 JFR.dump name=MyRecording filaneme=myrecording.jfr
  • 创建一个堆dump。jcmd <pid> GC.heap.dump filename=Myheapdump
  • 创建一个堆柱状图。jcmd <pid> GC.class_histogram filename=Myheaphistogram



你可能感兴趣的:(JVM问题诊断)