当 cgroup 中的进程达到内存限制时,Linux 内核会采取什么行为?

当 cgroup 中的进程达到内存限制时,Linux 内核会采取什么行为?

内存资源控制器cgroups v1允许使用该memory.limit_in_bytes文件对特定 cgroup 的内存使用设置限制。当达到此限制时,Linux 内核会采取什么行为?

尤其:

  • 内核 OOM 是否会终止该进程?如果是,是否会oom_score考虑该进程的内存,或者是否是请求内存导致达到限制的进程被终止?
  • 或者内存请求是否会被拒绝,在这种情况下,如果进程不处理此类事件,它只会死亡?

答案1

默认情况下,OOM 正在监督 cgroup。

内存.oom_control

包含一个标志(0 或 1),用于启用或禁用 cgroup 的内存不足终止程序。如果启用 (0),则尝试消耗超出允许内存的任务将立即被 OOM 终止程序终止。默认情况下,每个使用内存子系统的 cgroup 中都会启用 OOM Killer;要禁用它,请将 1 写入 memory.oom_control 文件:

  ~]# echo 1 > /cgroup/memory/lab1/memory.oom_control

当 OOM Killer 被禁用时,尝试使用超过允许内存的任务将被暂停,直到释放更多内存。

参考

相关内容