在OOM杀手/ cgroup杀死进程之前接收信号


11

在我们的集群中,我们正在限制进程资源,例如内存(memory.limit_in_bytes)。

我认为,最后,这也可以通过Linux内核中的OOM杀手来处理(通过阅读源代码看起来很像)。

在我的进程被杀死之前,有什么方法可以发出信号吗?(就像SGE的-notify选项一样,该选项将在进程终止qsubSIGUSR1之前发送。)

我在/dev/mem_notify 这里了解到有关信息,但我没有它-如今还有其他东西吗?我也读了这篇似乎有些相关的文章。

我希望至少能够转储一个小的堆栈跟踪信息以及其他一些有用的调试信息-但也许我甚至可以通过释放一些内存来恢复。

我当前正在使用的一种解决方法是这个小脚本该脚本经常检查我是否接近极限(95%),如果是,它将发送过程a SIGUSR1。在Bash中,我将在后台(cgroup-mem-limit-watcher.py &)启动此脚本,以便它监视同一cgroup中的其他proc,并在父Bash进程终止时自动退出。


我找不到任何授权来源,也找不到手动为特定进程调用OOM杀手的方法(以测试想法),但是从我发现看来,OOM杀手只是发送SIGTERM,所以您必须设置此信号的处理程序。
Hi-Angel

5
@ Hi-Angel:从Linux源代码看,它似乎发送了SIGKILL。
艾伯特

@Albert阅读源代码后,我还认为OOM Killer将直接发送SIGKILL信号。
andy

Answers:



5

OOM杀手确实会发送SIGKILL,否则让有问题的程序继续进行选择会适得其反。

这意味着一个进程绝对不可能知道什么时候该进程将被杀死。

处理此类问题通常意味着需要对程序或其配置进行更正。有时,根据系统的配置,简单地增加交换空间可以为OS提供更大的内存管理灵活性,从而避免采取如此严厉的措施。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.