Linux防止进程因为OOM而被系统终结

情形说明

运行程序一段时间,本来没有到程序结束的时候却突然出现”killed”提示然后退出,本来程序不应该现在结束的结果不知道怎么回事被结束了,原以为是有人恶作剧但是后来发现不是的。

OOM终结进程

Linux有一个OOM kill机制,OOM是Out of Memory的缩写。当进程申请空间的时候内核会尽量满足程序的要求,但是可能后来kernel突然发现分配出去的空间过多了,以至于现在系统可用内存空间不足,它就会终结部分用户程序来释放内存空间,这就是OOM kill的原因. 其发生的本质原因还是系统内存不够用了,kernel需要终止部分用户程序回收空间。参考官方文档

禁止kill指定进程

面对这种情况我们如果想要继续运行我们的程序,就需要我们将我们的用户程序排除出kill的名单,也就是当系统Out of Memory的时候不选择kill我们设置排除的进程。命令如下:

sudo pgrep -f "main.py"|while read PID;do sudo bash -c "echo -17 > /proc/$PID/oom_adj";done

注意该命令后面加上sudo bash -c是因为如果不加可能会出现权限不够的错误,前面main.py是用来定位我们的进程的,其是进程启动的时候命令的标志,通过这个标志找到我们的进程,不同的进程需要修改为不同的标志。该命令有个好处就是可能系统中同一个程序多有多个进程,这个命令可以一下子把所有的这些进程排除出kill名单。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注