喵星之旅-屯粮的松鼠-Linux-OOM killer

什么是oom killer

OOM全称 Out-of-Memory,也就是操作系统的可利用的内存已经不足了,没法再分配新的内存出来给进程,导致系统没法继续工作,如果不紧急处理,最终的结果必定是系统关机,系统上的所有进程将被杀死。因此OS为了保证内核系统层面的稳定运行,就会根据一定算法规则,选出最应该优先被杀死的进程(理论上就是最占内存空间的那个进程)进行杀死,杀死之后系统就腾出了大量的内存空间,系统的生命将得以延续,继续稳定运行,而这个机制就是OOM Killer机制。

内存不足的时候该怎么办,其实是个两难的事情,oom killer算是提供了一种方案.

linux OOM Killer的源码,看到作者留下的这句话:

1
2
3
4
5
* out_of_memory - kill the "best" process when we run out of memory
* If we run out of memory, we have the choice between either
* killing a random task (bad), letting the system crash (worse)
* OR try to be smart about which process to kill. Note that we
* don't have to be perfect here, we just have to be good.

大概翻译一下:“当我们内存不足时,我们有两种处理方案:随机杀死一个任务,这可能会导致系统崩溃;或者尝试有策略地选出值得杀死的那个任务。我们没有必要做到最好,但我们只需尽力把这事做好”。– 潜台词:这件事我们至今都没找到一个完美算法,误杀进程我们不背锅。

如何保护进程不被杀

参考命令

1
echo -200 > /proc/32625/oom_score_adj

其中32625就是要保护的进程号。

直接关闭oom-killer
echo "0" > /proc/sys/vm/oom-kill 关闭
echo "1″ > /proc/sys/vm/oom-kill 激活

文章目录
  1. 什么是oom killer
  2. 如何保护进程不被杀
|