Java应用内存溢出排查

longkang / 2023-08-03 / 原文

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导出快照后找到对应的类实例, 右键显示最近的垃圾回收根节点后选中实例右键在线程中显示, 定位对象产生代码段。