Java应用 内存溢出&CPU占满 排查
- 1.获取异常进程ID
top -m
- 2.保存堆快照
jmap -dump:format=b,file=/data/logdir/dump.hprof [PID]
- 3.观察GC状况
# 采样10次(2秒/次)后结束, 5行1组输出
jstat -gcutil -t -h5 [PID] 2s 10
- 4.获取进程内线程详情, 观察异常线程ID
top -Hp [PID]
- 5.根据线程id的16进制过滤出JVM线程, 大致得知是哪块线程出问题
jstack 进程ID | grep (`printf '%x' 线程ID`)
-
6.利用EclipseMemoryAnalyzer分析, 导入堆快照, 选择
Leak Suspects
, 查看问题对象 -
7.利用Jdk自带JavaVisual导出快照后找到对应的类实例, 右键
显示最近的垃圾回收根节点
后选中实例右键在线程中显示
, 定位对象产生代码段。