记一次Java oom排查

1. top指令查看进程找到高cpu占用pid

在这里插入图片描述

2. top -Hp 115705,查询高cpu占用进程的各线程情况

在这里插入图片描述

  • "VMThread"线程主要用于GC垃圾回收、dump 线程堆栈数据
  • 如图所示vm thread cpu100%,应该是存在大对象导致频繁gc,可以直接跳到本文第4步导出堆栈信息进行分析

3. 执行jstack查看堆栈信息

 - jstack <pid> | grep <线程16进制id> -A<行数>
eg. printf "%x\n" <线程10进制id> (该命令用于得到线程16进制id)
eg. jstack 115705 | grep 1c41f -A 20
 - jstack <pid> > <文件名>
eg. jstack 115705 >./115705java.dump

在这里插入图片描述

  • 报错:115705: Unable to open socket file: target process not responding or HotSpot VM not loaded
    The -F option can be used when the target process is not responding
  • 可能原因:
    https://blog.51cto.com/zhangshaoxiong/1310166
  • 解决方案:1.如果是启动进程的用户与当前用户不同导致,切换用户再使用上述命令 2.如果不是用户原因,使用jstack -F pid(加上-F )命令 3.如果还解决不了可以采用重启进程解决该问题 (如果不想重启进程直接采用下面第4点导出堆栈信息进行分析即可)

4. 导出堆栈信息

jmap -dump:live,format=b,file=live_web_dump.hprof 115705
在这里插入图片描述

5. 将hprof文件导入jprofiler分析

  • 点击Start Center导入hprof文件
    在这里插入图片描述
  • 点击Biggest Objects
    在这里插入图片描述
    在这里插入图片描述
  • 选择Incoming referrences
    在这里插入图片描述
  • 找到产生大对象的方法,回归代码优化该方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值