Rain WikiWindows · Linux · Android

OOM 终结者

概念所有 Linux 发行版

OOM(内存溢出)终结者是 Linux 内核的一个组件,当系统内存耗尽且无法释放时,它会终止一个进程。它根据 OOM 分数来选择进程,通常选择内存占用最多的进程。内核日志会记录每一次 OOM 终止。

1如何选择受害者

每个进程在 /proc/<pid>/oom_score 中都有一个分数,该分数会随着内存使用量的增加而增长。/proc/<pid>/oom_score_adj 的取值范围为 -1000 到 1000,用于调整该分数;-1000 意味着该进程永远不会被选中。

2查找 OOM 终止

内核会在其日志中写入 'Out of memory: Killed process'。使用 journalctl -k | grep -i oom 或 dmesg | grep -i oom 可以显示这些消息,以及进程名称及其内存占用。

3预防

增加内存或交换分区、限制高内存消耗的服务,或使用诸如 MemoryMax= 等 systemd 选项为每个服务设置限制。某些发行版还运行 systemd-oomd,它根据内存压力更早地采取行动。

如何调查 OOM 终止

  1. 搜索内核日志:journalctl -k | grep -i -A5 'out of memory'
  2. 记录被终止的进程及其内存大小。
  3. 检查当前的内存和交换分区:free -h
  4. 查找占用内存最多的进程:ps aux --sort=-rss | head
  5. 添加交换分区或限制服务,然后观察是否再次发生。

注意事项

  • 将许多进程的 oom_score_adj 设置为 -1000 可能会导致内核没有安全的备选进程。
  • 在不了解内存过量使用保护机制的情况下将其关闭,可能会导致其他地方出现故障。

资料来源

  1. proc(5) 手册页:oom_score 和 oom_score_adj man7.org
  2. 内存溢出管理 (kernel.org) kernel.org

说明: RainServer 为 Linux 服务器提供监控和安全清理功能;它会显示将要发生的变化并事先征求确认。

最后审核: