什么是oom killer
OOM全称 Out-of-Memory,也就是操作系统的可利用的内存已经不足了,没法再分配新的内存出来给进程,导致系统没法继续工作,如果不紧急处理,最终的结果必定是系统关机,系统上的所有进程将被杀死。因此OS为了保证内核系统层面的稳定运行,就会根据一定算法规则,选出最应该优先被杀死的进程(理论上就是最占内存空间的那个进程)进行杀死,杀死之后系统就腾出了大量的内存空间,系统的生命将得以延续,继续稳定运行,而这个机制就是OOM Killer机制。
内存不足的时候该怎么办,其实是个两难的事情,oom killer算是提供了一种方案.
linux OOM Killer的源码,看到作者留下的这句话:
1 | * out_of_memory - kill the "best" process when we run out of memory |
大概翻译一下:“当我们内存不足时,我们有两种处理方案:随机杀死一个任务,这可能会导致系统崩溃;或者尝试有策略地选出值得杀死的那个任务。我们没有必要做到最好,但我们只需尽力把这事做好”。– 潜台词:这件事我们至今都没找到一个完美算法,误杀进程我们不背锅。
如何保护进程不被杀
参考命令
1 | echo -200 > /proc/32625/oom_score_adj |
其中32625就是要保护的进程号。
直接关闭oom-killerecho "0" > /proc/sys/vm/oom-kill
关闭echo "1″ > /proc/sys/vm/oom-kill
激活