![当 cgroup 中的进程达到内存限制时,Linux 内核会采取什么行为?](https://linux22.com/image/136222/%E5%BD%93%20cgroup%20%E4%B8%AD%E7%9A%84%E8%BF%9B%E7%A8%8B%E8%BE%BE%E5%88%B0%E5%86%85%E5%AD%98%E9%99%90%E5%88%B6%E6%97%B6%EF%BC%8CLinux%20%E5%86%85%E6%A0%B8%E4%BC%9A%E9%87%87%E5%8F%96%E4%BB%80%E4%B9%88%E8%A1%8C%E4%B8%BA%EF%BC%9F.png)
内存资源控制器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 被禁用时,尝试使用超过允许内存的任务将被暂停,直到释放更多内存。