CPU飙高问题排查
1.top命令找出cpu高的PID
2.top -H -p PID找到CPU占用率比较高的线程TID
3.printf "%x\n" TID将线程ID转换为16进制
4.jstack pid |grep tid -A 50 查看这个线程现在的执行情况
OOM问题排查
1.查看内存回收情况jstat -gcutil PID 1000 100
S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
YGCT:从应用程序启动到采样时Young GC所用的时间(单位秒)
FGC:老年代垃圾回收次数
FGCT:从应用程序启动到采样时Full GC所用的时间(单位秒)
GCT:垃圾回收消耗总时间
2.查看实时堆内存使用情况jmap -histo:live PID | head -n 100
3.DUMP文件导出分析内存使用情况jmap -dump:format=b,file=/usr/local/software/dump.hprof PID
dump内存日志,使用MAT工具分析,经过MAT工具分析之后,基本上能确定内存中主要是哪个对象比较消耗内存
另一种排查方式
参考:https://www.jianshu.com/p/011f0e3a39ff