记一次莫名停服(OOM Killer)

早上发现网站无法访问,查看状态码,是502,即知道是负载后端的应用停服。登录服务器,进程确认已经不存在。检查应用日志,却发现并无异常,很奇怪进程为啥会挂掉。

查看 /var/log/message 发现如下信息:

Jun 28 16:08:55 iZ8vbxxx1u3Z kernel: [ pid ]   uid  tgid total_vm      rss nr_ptes swapents oom_score_adj name
......
Jun 28 16:08:55 iZ8vbxxx1u3Z kernel: [15324]     0 15324    38678      328      79        0             0 sshd
Jun 28 16:08:55 iZ8vbxxx1u3Z kernel: [15328]     0 15328    18062      210      39        0             0 sftp-server
Jun 28 16:08:55 iZ8vbxxx1u3Z kernel: [15775]     0 15775   588027    91836     240        0             0 java
Jun 28 16:08:55 iZ8vbxxx1u3Z kernel: [15822]     0 15822    38711      405      81        0             0 sshd
Jun 28 16:08:55 iZ8vbxxx1u3Z kernel: [15879]     0 15879    45594      249      46        0             0 crond
Jun 28 16:08:55 iZ8vbxxx1u3Z kernel: [15881]     0 15881    28296       66      11        0             0 run-parts
Jun 28 16:08:55 iZ8vbxxx1u3Z kernel: [15893]     0 15893   156948    53661     229        0             0 yum-cron
Jun 28 16:08:55 iZ8vbxxx1u3Z kernel: [15894]     0 15894    28386       36      12        0             0 awk
Jun 28 16:08:55 iZ8vbxxx1u3Z kernel: Out of memory: Kill process 15775 (java) score 352 or sacrifice child
Jun 28 16:08:55 iZ8vbxxx1u3Z kernel: Killed process 15775 (java), UID 0, total-vm:2352108kB, anon-rss:366108kB, file-rss:1236kB, shmem-rss:0kB

看来是触发了Linux内核的“Out Of Memory killer”机制;

当剩余内存空间大小过低时,OOM killer就会选取一个进程强制kill。

被kill进程的选取主要基于2点:

  1. kill它能释放最多的内存;
  2. 对系统来说kill它的影响最小。

实际操作上,内核对每个进程都维护了一个 oom_score 值。值越高,越可能被OOM Killer选中。当前基本就是占用内存量。

$ cat /proc/pid/oom_score

如果不想进程被kill,一种方法时修改它的 oom_score_adj 值。设置为 -1000 时,OOM Killer 就会忽略这个进程。

sudo echo -1000 > /proc/pid/oom_score_adj

或者,修改服务Unit

[Service]
OOMScoreAdjust=-1000

当然这两个方式都相当不清爽。

这时,小伙伴提示了一下,ECS内存只有1G。

什么?才配置了1G?。。。确认程序无内存泄漏后,套餐升级成4G。问题解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值