使用方式
Usage: jstat -help|-options
jstat -
例子1: 查看gc信息,每 250 秒查询一次,总共查询 20 次
jstat -gc pid 250 20
例子2:
其中 pid 可以通过 jdk 自带工具 jps(直接在命令行执行jps命令即可) 进行查看
jstat -gcutil 70159
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 87.77 40.26 96.34 94.45 25 0.432 4 0.531 0.963
S0:代表 S0 区域使用占比 0%
S1:代表 S1 区域使用占比 0%
E: 代表 eden 区域使用比例为87.77%
O:代表老年代区域使用占比 40.26%
YGC:young GC 发生 25 次
YGCT:年轻代GC总耗时 0.432 秒
FGC:老年代GC总共发生4次
FGCT:老年代GC公共耗时 0.531 秒
GCT:GC 总共耗时 0.963秒
使用方式
Usage:
jinfo [option]
(to connect to running process)
jinfo [option]
(to connect to a core file)
jinfo [option] [server_id@]
(to connect to remote debug server)
where
例子:查看指定VM参数值,这里是 CMS 垃圾回收器,占用多少内存会触发整理操作
jinfo -flag CMSInitiatingOccupancyFraction 70159
例子2: 查看VM所有参数
jinfo -flags 70159
用来生成堆转储快照(一般称为heapdump或dump文件)。如果不实用jmap命令,
其他比较暴力的方式:
1、(-XX:+HeapDumpOnOutOfMemoryError)
2、-XX:HeapDumpOnCtrlBreak可以使用 ctrl + break 命令让虚拟机生成 dump 文件
3、在 Linux 系统,可以通过 kill -3 命令发送进程退出新号“吓唬”以下虚拟机,也能获取到 dump 文件。
使用方式:
Usage:
jmap [option]
(to connect to running process)
jmap [option]
(to connect to a core file)
jmap [option] [server_id@]
(to connect to remote debug server)
where
例子:生成 dump 文件
jmap -dump:format=b,file=eclipse.bin 2500
一般不用,一个是因为:一般不会在部署应用程序的服务器上直接分析dump,因为分析demp文件是一个耗时而且消耗硬件资源的操作;二是因为jhat的分析功能相对来说比较简陋。一般可以使用 Eclipse Memory Analyzer或者IBM HeapAnalyzer等工具。
如果需要使用,可以参照博客:mac平台下怎么分析java堆hprof文件 https://blog.csdn.net/Prepared/article/details/115589701
主要是用来生成线程快照,用于分析定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待。
Usage:
jstack [-l]
(to connect to running process)
jstack -F [-m] [-l]
(to connect to a hung process)
jstack [-m] [-l]
(to connect to a core file)
jstack [-m] [-l] [server_id@]
(to connect to a remote debug server)
Options:
-F 当正常输出的请求不被响应时,强制输出线程堆栈
-m 如果调用到本地方法的话,可以显示C/C++的堆栈
-l 除堆栈外,显示关于锁的附加信息
-h or -help to print this help message
jdk1.5之后,Thread类提供了 getAllStackTraces() 可以获取虚拟机中所有线程的 StackTraceElement 对象,可以完成大部分jstack功能,可以用这个做一个界面。
mac系统,直接在控制台执行命令:jconsole
启动相应的界面
选择要监控的进程
查看对应进程的堆、新生代、老年代内存情况
mac系统,直接在控制台执行命令:jvisualvm
启动相应的界面
优点:
功能范围:
安装相应的插件,更好的使用该工具。
文中内容整理自周志明老师的《深入理解Java虚拟机:JVM高级特性与最佳实践》