一次OOM的排查

服务器出现OOM了怎么办

第一步:保存现场

之前不懂,输入命令 jmap -histo:live < pid >,导致JVM被强制fullGC了,现场被破坏了。所以我们记得不用使用live这个选项,它会强制FullGC。

  1. 首先,获取进程号。可以通过jps -lv 或者ps -ef | grep ‘你的工程名’,用这两个命令可以拿到pid。
  2. 看实例对象的数量以及大小。jmap -histo [ pid ] > /xxx/xxx.txt,通过这种方式,可以把现场保存成文件。
  3. 生成内存快照,可以用工具分析。jmap -dump:format=b,file=/xxx/xxx.hprof [ pid ]

第二步:分析现场

如果文件不大,可以通过jvisualvm工具或eclipse memory analyzer工具分析。

  1. 首先我们看看实例对象的快照。可以发现int byte char类型的实例对象有很多。
    在这里插入图片描述
  2. 接下来我们通过工具可以看出char类型中,这个实例对象的内存占用大,而且数量还不少。在这里插入图片描述

第三步 分析代码

我们发现,代码中只有这段方法,会使用到上述对象:
在这里插入图片描述
在代码中,当请求接口失败时,会尝试3次,每次都会生成json对象。只有3次都失败才退出方法。而当我们观察服务器的日志可以发现,日志中出现大量调用接口的语句。因此,我们基本可以锁定此次OOM的罪魁祸首了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值