关于IT运维技术的
最佳实践博客网站

May 28 03:32:59 aliyun kernel: Killed process 8057 (sphinx-intl) total-vm:309212kB, anon-rss:103816kB, file-rss:0kB

登陆机器后发现:

目测应该是我的sphinx-intl生成文档的定时任务长期运行,占用满了内存。虽然是强制把系统给重启了一下,就好,但是为了解决本质问题,网上搜索不少资料,解决方法如下。
1737634742@chatroom_1464492215909_57

症状:

重则整个系统假死,终端没有反应,SSH可以建立连接,但是登录不上,系统可以ping通,这个问题是由于 Linux 系统的 OOM killer 所致:

解决方法:

什么是Overcommit和OOM?

overcommit的策略,当oom-killer发生时,linux会选择杀死哪些进程

在Unix中,当一个用户进程使用malloc()函数申请内存时,假如返回值是NULL,则这个进程知道当前没有可用内存空间,就会做相应的处理工作。许多进程会打印错误信息并退出。Linux使用另外一种处理方式,它对大部分申请内存的请求都回复”yes”,以便能跑更多更大的程序。因为申请内存后,并不会马上使用内存。这种技术叫做Overcommit。
当内存不足时,会发生OOM killer(OOM=out-of-memory)。它会选择杀死一些进程(用户态进程,不是内核线程),以便释放内存。

Overcommit的策略

Linux下overcommit有三种策略:
  • 0. 启发式策略。合理的overcommit会被接受,不合理的overcommit会被拒绝。
  • 1. 任何overcommit都会被接受。
  • 2. 当系统分配的内存超过swap+N%*物理RAM(N%由vm.overcommit_ratio决定)时,会拒绝commit。

overcommit的策略通过vm.overcommit_memory设置。
overcommit的百分比由vm.overcommit_ratio设置。

# echo 2 > /proc/sys/vm/overcommit_memory
# echo 80 > /proc/sys/vm/overcommit_ratio

当oom-killer发生时,linux会选择杀死哪些进程,选择进程的函数是oom_badness函数(在mmm_kill.c中),该函数会计算每个进程的点数(0~1000)。
点数越高,这个进程越有可能被杀死。每个进程的点数跟oom_score_adj有关,而且oom_score_adj可以被设置(-1000最低,1000最高)。

错误日志:

[root@aliyun ~]# cat /var/log/messages | grep Killed
May 28 03:32:59 aliyun kernel: Killed process 8057 (sphinx-intl) total-vm:309212kB, anon-rss:103816kB, file-rss:0kB
May 28 04:20:18 aliyun kernel: Killed process 8336 (sphinx-intl) total-vm:307572kB, anon-rss:102036kB, file-rss:0kB
May 29 05:30:08 aliyun kernel: Killed process 19512 (sphinx-intl) total-vm:300492kB, anon-rss:95092kB, file-rss:4kB
May 29 09:27:04 aliyun kernel: Killed process 20758 (sphinx-intl) total-vm:310724kB, anon-rss:105264kB, file-rss:0kB
May 29 10:11:00 aliyun kernel: Killed process 20822 (sphinx-intl) total-vm:305376kB, anon-rss:99876kB, file-rss:0kB
[root@aliyun ~]# cat /var/log/messages | grep Kill
May 28 03:32:59 aliyun kernel: Out of memory: Kill process 8057 (sphinx-intl) score 48 or sacrifice child
May 28 03:32:59 aliyun kernel: Killed process 8057 (sphinx-intl) total-vm:309212kB, anon-rss:103816kB, file-rss:0kB
May 28 04:20:18 aliyun kernel: Out of memory: Kill process 8336 (sphinx-intl) score 48 or sacrifice child
May 28 04:20:18 aliyun kernel: Killed process 8336 (sphinx-intl) total-vm:307572kB, anon-rss:102036kB, file-rss:0kB
May 29 05:30:08 aliyun kernel: Out of memory: Kill process 19512 (sphinx-intl) score 44 or sacrifice child
May 29 05:30:08 aliyun kernel: Killed process 19512 (sphinx-intl) total-vm:300492kB, anon-rss:95092kB, file-rss:4kB
May 29 09:27:04 aliyun kernel: Out of memory: Kill process 20758 (sphinx-intl) score 49 or sacrifice child
May 29 09:27:04 aliyun kernel: Killed process 20758 (sphinx-intl) total-vm:310724kB, anon-rss:105264kB, file-rss:0kB
May 29 10:11:00 aliyun kernel: Out of memory: Kill process 20822 (sphinx-intl) score 47 or sacrifice child
May 29 10:11:00 aliyun kernel: Killed process 20822 (sphinx-intl) total-vm:305376kB, anon-rss:99876kB, file-rss:0kB

其它类似的日志

kernel: Killed process 30980, UID 0, (crond) total-vm:140064kB, anon-rss:336kB, file-rss:996kB

 

赞(0)
未经允许不得转载:菜鸟HOW站长 » May 28 03:32:59 aliyun kernel: Killed process 8057 (sphinx-intl) total-vm:309212kB, anon-rss:103816kB, file-rss:0kB
分享到: 更多 (0)

留下你的脚印

  订阅  
关注动态