项目

一般

简介

清远信创OA项目V9内存泄漏导致宕机问题

由 lv pengqin 在 大约 3 年 之前添加

问题描述:应用方为正盟,部署在五台服务器上,五台服务器分别宕机过分别为8、13、14、15、16

排查过程:

1.首先检查jvm内存大小。并查看系统内存,发现8设置为了16G,其他四台为32G

2.mydomain目录下生成了宕机过后的hs_err.log文件,13是没有生成的,hs_err.log附件中可下载查看

查看hs_err.log发现

存在内存泄露,怀疑应该是应用死循环导致宕机

3.使用sysctl vm.overcommit_memory命令返回的结果五台都是0,0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。

4.通过egrep -i -r 'killed process' /var/log 查看系统是否主动杀死程序进程,结果如下:

5。使用grep “Out of memory” /var/log/messages 查看Linux系统触发oom-killer机制杀死占用内存过大的进程

对比发现和通过egrep -i -r 'killed process' /var/log查出的结果对上了,因为out of memory导致宕机,系统触发oom-killer机制杀死进程这里15和16并没有输出结果,后续排查出是因为使用了普通用户导致无权限,切换为root就行。

使用dmesg命令查看是否触发oom-killer,结果如下

oom-killer机制,感兴趣的可以去看看,对宕机分析可能会有帮助  https://zhuanlan.zhihu.com/p/372786019

因为这五台会无顺序的宕机,询问应用方发现是因为访问流量不同,后续8 13 14 都没出现过宕机情况,15和16开始频繁出现,让应用方将五台的Xmx还有Xms调至8G

使用jmap命令  jmap -dump:live,format=b,file=/opt/AASV9/heap.hprof pid 

利用jprofile工具打开 heap.hprof 分析从15和16中导出的文件,结果如下

询问应用方了解到这是他们加载他们的相关常驻内存的缓存类,配置比较大,net.cyan缓存不释放导致占用内存过大。

解决方法:应用方将相关内存调小至1G。