1. 介绍
“纸上得来终觉浅,绝知此事要躬行。”最近发现自己在JVM调优工具的使用上还存在知识盲区,故尽快调研了一些资料,总结一下这些工具的使用,以供以后自己复习查看。
JDK提供的小巧工具简单介绍一览如下:
名称
作用
jps
JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程
jstat
JVM Statistics Monitoring Tool,显示收集HptSpot虚拟机各方面的运行数据
jinfo
Configuration Info For java,显示虚拟机配置信息
jmap
Memory Map for Java,生成虚拟机的内存转储快照(heapdump)
jhat
Stack Trace for Java显示虚拟机的线程快照
2. GC日志
首先需要在启动JVM时候加上参数来打开GC日志。GC日志参数说明如下:
期中-verbose.gc也可以写成-XX:+PrintGC
注意下图中有些地方大小写错误了,例如第二行的-XX需要大写,请知悉
2.1 -XX:+printGC查看简单的GC日志
参数-XX:+PrintGC(或者-verbose:gc)开启了简单GC日志模式,为每一次新生代(young generation)的GC和每一次的Full GC打印一行信息。
下面来实际使用下:
在IDEA中设置相关的VM参数
然后启动一个项目。我这里启动的是阿里的一个开源项目otter,可以看到程序运行过程中,每次发生full GC或者minor GC都会有相关的信息输出
每行开始首先是GC的类型(可以是“GC”或者“Full GC”),然后是在GC之前和GC之后已使用的堆空间,再然后是当前的堆容量,最后是GC持续的时间(以秒计)。
简单模式的GC日志格式是与GC算法无关的,日志也没有提供太多的信息。在上面的例子中,我们甚至无法从日志中判断是否GC将一些对象从young generation移到了old generation。所以详细模式的GC日志更有用一些。
2.2 -XX:PrintGCDetails
如果不是使用-XX:+PrintGC,而是-XX:PrintGCDetails,就开