首页   快速返回

jdk jcmd 使用
文章分类 java
发布时间 2018-12-04 修改时间 2018-12-04
JDK 1.7之后,新增命令行工具jcmd 可以用来导出堆,查看Java进程,导出线程信息,执行GC等
jcmd拥有jmap的大部分功能,Oracle官方建议使用jcmd代替jmap

类统计信息GC.class_histogram 
堆转储 GC.heap_dump 
获取系统Properties VM.system_properties
获取启动参数 VM.flags
获取所有性能相关数据 PerfCounter.print
查看堆外内存信息 VM.native_memory summary 

查看可用命令

jcmd 41260 help

41260:
The following commands are available:
JFR.stop
JFR.start
JFR.dump
JFR.check
VM.native_memory
VM.check_commercial_features
VM.unlock_commercial_features
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
GC.rotate_log
Thread.print
GC.class_stats
GC.class_histogram
GC.heap_dump
GC.run_finalization
GC.run
VM.uptime
VM.flags
VM.system_properties
VM.command_line
VM.version
help


 jcmd 41260 GC.class_histogram|head -20
效果同 jmap -histo pid
 
 查看虚拟机启动时间 VM.uptime
 打印线程栈信息 Thread.print   与 jstack 一样
 导出堆信息 GC.heap_dump
 jcmd 41260  GC.heap_dump xxx.bin
效果同  jmap -dump:format=b,file=heapdump.phrof pid
如果只指定文件名,默认会生成在启动 JVM 的目录里

获取系统Properties内容 VM.system_properties

获取启动参数VM.flags

获取所有性能相关数据 PerfCounter.print

GC原因
执行堆dump
sun.gc.lastCause="Heap Dump Initiated GC"

执行 jcmd 41260 GC.run 之后
sun.gc.lastCause="System.gc()"

java.cls.loadedClasses=3631
java.cls.sharedLoadedClasses=0
java.cls.sharedUnloadedClasses=0
java.cls.unloadedClasses=55

java.property.java.version="1.8.0_60"
java.property.java.vm.info="mixed mode"

java.threads.daemon=22
java.threads.live=23
java.threads.livePeak=56
java.threads.started=57

上一篇     下一篇
50个经典思维助你打开思路

投资人尽职调查要点整理

MySQL InnoDB的4个特性

mysql知识点整理

架构师需要具备的能力和素质

memcached知识点整理