阻止进程(脚本)调用 oom killer

阻止进程(脚本)调用 oom killer

我遇到过非常不幸的情况,一个包含细微错误的 bash 脚本变得疯狂并占用了所有可用内存,然后开始终止其他任务(生产应用程序!)以获取更多内存。

我如何才能对该脚本和其他脚本的调用进行未来验证,以便当它们达到内存限制时,它们会自动终止其他应用程序?

我更希望能够将一些内容融入到剧本文本中。

答案1

ulimit -m将允许您设置适用于某个进程的核心(嗯,RSS)限制,并ulimit -v允许您对 VM 占用空间执行同样的操作。

答案2

在 Linux 上, https://www.kernel.org/doc/Documentation/sysctl/vm.txt 记录虚拟内存系统的各种可调参数。

例如,vm.oom_kill_allocating_task=1

如果将其设置为非零,OOM 终止程序将直接终止触发内存不足情况的任务。这样可以避免昂贵的任务列表扫描。

无法保证您的生产应用程序不会触发 OOM。但失控的分配更有可能触发 OOM。

您还可以调整一个分数,以衡量特定进程因内存不足而被杀死的可能性。/proc/$PID/oom_adj。不过,您可能希望在 init 脚本中设置它。 systemd.exec 有 OOMScoreAdjust

您可以完全禁用 OOM 杀手。但是,在极端内存压力下,系统可能无法响应或崩溃。

答案3

您可以使用supervisord来管理进程。Supervisor可以设置内存配额。

相关内容