用top来查看机器里cpu使用率最高进程的识别号pid方法,这个我们都会,那么怎么进一步分析呢?
jstat:
jstat -gcutil -h10 <pid> 1000 1000
查看指定进程的内存使用情况,用于评价当前进程是否有内存无法释放问题,包括(会有缩写)如下:
- S0C:第一个幸存区的大小
- S1C:第二个幸存区的大小
- S0U:第一个幸存区的使用大小
- S1U:第二个幸存区的使用大小
- EC:伊甸园区的大小
- EU:伊甸园区的使用大小
- OC:老年代大小
- OU:老年代使用大小
- MC:方法区大小
- MU:方法区使用大小
- CCSC:压缩类空间大小
- CCSU:压缩类空间使用大小
- YGC:年轻代垃圾回收次数
- YGCT:年轻代垃圾回收消耗时间
- FGC:老年代垃圾回收次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
如果老年代的使用率(O列)接近100,且老年代的回收次数(FGC列)正在不断增加,那么考虑内存无法释放。
jstack:
jstack <pid> | grep <十六进制子进程号>
查看进程的使用堆栈,可以定位到代码的行号。
jmap:
jmap -dump:format=b,file=<sysName>.data <pid>
导出内存快照,导出结果可以用MAT等工具可视化分析内存使用率。