记一次weblogic异常退出原因的排查过程

情景描述

云服务器上weblogic毫无征兆的突然宕机,weblogic中启动的服务全部停止。

排查思路

因为是整个weblogic退出,所以第一想到的也是内存溢出导致。首先查看了weblogic日志,但是由于weblogic进程直接被杀掉,导致weblogic日志并没有记录任何异常。然后开始查看系统日志寻找问题原因/var/log/messages,发现系统日志中有许多Out of memory: Kill process XXX的日志,验证了是内存溢出导致的异常退出。
在这里插入图片描述

原因解析

根据对系统日志的分析,确认weblogic退出并非weblogic本身的问题,而是整个系统内存不足,导致触发了oom killer。
oom killer介绍:
要理解oom_killer,首先需要理解linux系统overcommit特性。linux出于系统优化考虑,允许程序申请比系统可用内存更多的内存,由于不是所有的程序申请了内存就立刻使用,当需要使用的时候系统可能已经回收了一些资源了。这种特性叫做overcommit。因为这个特性,就会出现系统资源回收不及时导致out-of-memory问题。
linux下有3种overcommit的策略,可以在/proc/sys/vm/overcommit_memory配置。取0,1和2三个值,默认是0。
0:启发式策略
比较严重的overcommit将不能得逞,root用户能overcommit的值比普通用户稍多。
1:永远允许overcommit
这种策略适合那些不能承受内存分配失败的应用,比如某些科学计算应用。
2:永远禁止overcommit
在这个情况下,系统所能分配的内存不会超过swap+RAM*系数(/proc/sys/vm/overcommit_ratio,默认50%,可以调整),如果这些资源全部用光,那么后面任何尝试申请内存的行为都会返回错误,这意味着此时没法运行任何新程序。

由于overcommit可以申请的内存超过实际物理内存,当实际使用的内存超过实际物理内存时,linux即会启动oom killer,挑选进程杀死,释放内存,来解决内存不足的问题;oom killer是通过/proc/pid/oom_score这个值来决定哪个进程被干掉的。这个值是系统综合进程的内存消耗量、CPU时间(utime + stime)、存活时间(uptime - start time)和oom_adj计算出的,消耗内存越多分越高,存活时间越长分越低。

日志分析

在这里插入图片描述

参考文章:https://blog.csdn.net/sbjiesbjie/article/details/52624467

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值