清远信创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。
8.log (1.78 KB) 8.log | |||
14.log (329 KB) 14.log | |||
15.log (328 KB) 15.log | |||
16.log (316 KB) 16.log | |||
dmesg20220424.log (97.8 KB) dmesg20220424.log | |||
dmesg20220422.log (121 KB) dmesg20220422.log | |||
13dmesg20220422.log (119 KB) 13dmesg20220422.log | |||
14dmesg20220422.log (108 KB) 14dmesg20220422.log | |||
15dmesg20220422.log (97.2 KB) 15dmesg20220422.log | |||
16dmesg20220422.log (96.6 KB) 16dmesg20220422.log |