调整 OOM Killer 的日志记录级别

调整 OOM Killer 的日志记录级别

有没有办法配置 Linux,使得 OOM 终止程序仅报告/发布被终止的进程,但不转储整个机器状态?

我之所以问这个问题,是因为在我们的生产系统中,我们的一些客户运行他们的工作负载。一些进程的 OOM 终止会导致日志文件膨胀 - 因此导致操作系统磁盘上出现大量 IO,并且系统变得不稳定且难以交互。

我们花了很多时间在谷歌上搜索这个问题,但我们主要发现如何调整进程的 OOM 分数(进程的优先级),但没有找到如何调整 OOM 杀手的日志记录级别。

谢谢你的时间!

答案1

并且某些进程的 OOM 终止会导致日志文件膨胀 - 从而导致操作系统磁盘上出现大量 IO,并且系统变得不稳定且难以交互。

不!

您的系统内存不足,严重到触发 OOM killer。是什么让你的系统不稳定。

您误解了因果关系。


恕我直言,如果内存不足杀手需要频繁运行,那应该是您需要解决的实际问题。

除非您的系统真的很大,或者小到可笑,否则生成和存储由 OoM-killer 生成的任务转储应该不是什么真正的问题。

但是在大型系统上,您可以设置内核可调参数vm.oom_dump_tasks0 禁用任务转储。

https://www.kernel.org/doc/Documentation/sysctl/vm.txt

oom_dump_tasks

当内核执行 OOM 终止时,启用生成系统范围的任务转储(不包括内核线程),并包含诸如 pid、uid、tgid、vm 大小、rss、pgtables_bytes、swapents、oom_score_adj 分数和名称之类的信息。这有助于确定调用 OOM 终止程序的原因、识别导致此问题的恶意任务以及确定 OOM 终止程序选择终止该任务的原因。

如果将其设置为零,则此信息将被抑制。在包含数千个任务的大型系统中,可能无法转储每个任务的内存状态信息。当可能不需要这些信息时,不应强迫此类系统在 OOM 条件下承受性能损失。

如果将其设置为非零,则每当 OOM 终止程序实际终止占用大量内存的任务时,就会显示此信息。

默认值为1(启用)。

相关内容