在JDK 1.7之后,新增了一个命令行工具jcmd。它是一个多功能工具,可以用来导出堆,查看Java进程,导出线程信息,执行GC等。
jcmd功能非常强大,性能监控,进程启动参数,系统属性,线程状态,内存分布使用情况,内存回收情况。
命令格式:jcmd pid command
jcmd 20 help
jcmd 20 VM.native_memory
jcmd 20 VM.uptime
jcmd 20 Thread.print
jcmd 20 Thread.print > print.info
cat print.info |grep java.lang.Thread.State |wc -l
18 jcmd 20 GC.class_histogram
19 jcmd 20 GC.class_histogram > gram
25 cat gram |wc -l
26 jcmd 20 VM.system_properties
27 jcmd 20 VM.flags
28 jcmd 20 PerfCounter.print
30 jcmd 20 VM.native_memory summary
31 jcmd 20 VM.native_memory summary scale=MB
33 jcmd 20 VM.native_memory detail scale=MB
从以上示例可以看出,jcmd拥有jmap的大部分功能,并且Oracle官方也建议使用jcmd代替jmap。