先罗列下jcmd的常见用法:
查看CompressedClassSpace大小:jcmd pid GC.heap_info
在JDK 1.7之后,新增了一个命令行工具jcmd。它是一个多功能工具,可以用来导出堆,查看Java进程,导出线程信息,执行GC等。
下面这个命令能够列出当前运行的所有虚拟机:
参数-l表示列出所有java虚拟机,针对每一个虚拟机,可以使用help命令列出该虚拟机支持的所有命令,如下图所示,以8152这个进程为例:
查看系统中类统计信息GC.class_histogram
执行如下命令:
C:\Users\lenovo>jcmd 8152 GC.class_histogram
得到结果如下:
使用如下命令可以导出当前堆栈信息,这个命令功能和 jmap -dump 功能一样
docker下执行如下:
NMT(native memory tracking)使用
在JVM参数中添加 -XX:NativeMemoryTracking=[off | summary | detail]
-XX:NativeMemoryTracking=detail
在JVM运行过程中,使用jcmd获取相关信息
jcmd pid VM.native_memory [summary | detail | baseline | summary.diff | detail.diff | shutdown] [scale= KB | MB | GB]
jcmd pid VM.native_memory detail
baseline个基准,之后会输出diff参数,来和这个基线版本进行比较,可以两次的内存差
从以上示例可以看出,jcmd拥有jmap的大部分功能,并且Oracle官方也建议使用jcmd代替jmap。