????????jcmd實用工具用于向JVM發(fā)送診斷命令請求,這些請求主要用于控制 Java Flight Recordings,診斷和排除JVM和JAVA應用程序故障。該命令必須在JVM運行的機器上使用,同時必須是和啟動JVM擁有相同權限的用戶和用戶組。
????????更具體的jcmd語句和用法可以查看jcmd command man page。
????????該命令jcmd <process id/main class> PerfCounter.print會將程序中所有的性能計數(shù)打印出來。
????????jcmd <process id/main class> <command> [options]會向JVM發(fā)送實際的命令。
????????以下的例子是如何用jcmd向JVM發(fā)送診斷命令:
????????上面這張圖沒有截全,感興趣的可以自己操作下。
Useful Commands for jcmd Utility
????????不同版本的HotSpot VM,可用的診斷命令可能也會不同。因此,查看可用選項的最好方式是使用 jcmd <process id/main class> help命令。以下一些命令是在Java8中比較常用的命令。如果你想獲取這些命令的額外選項可以使用 jcmd <process id/main class> help <command>。
Print full HotSpot and JDK version ID
jcmd <process id/main class> VM.versionPrint all the system properties set for a VM
可能會有幾百行信息被展示。
jcmd <process id/main class> VM.system_propertiesPrint all the flags used for a VM
即使你沒有提供任何開關,一些默認的值也會被打印出來,例如初始化的堆大小和最大的堆大小。
jcmd <process id/main class> VM.flagsPrint the uptime in seconds
jcmd <process id/main class> VM.uptimeCreate a class histogram
結(jié)果會在控制臺打印出來,所以你也可以將其重定向到文件中。輸出列表中既包含了應用程序編寫的類也包含了Java的內(nèi)部類。占用內(nèi)存最多的類會被羅列在最上方,按占用內(nèi)存大小降序排序。
jcmd <process id/main class> GC.class_histogramCreate a heap dump (hprof dump)
jcmd GC.heap_dump <filename>
該用法與jmap -dump:file=<file> <pid>相同,不過jcmd是推薦的使用工具。Create a heap histogram
jcmd <process id/main class> Thread.print