为什么cgroup的内存子系统使用oom-killer而不是在进程允许内存超过cgroup限制时返回内存分配失败?

我们使用cgroup限制过程使用更多的资源,但是当cgroup中的内存超过限制时,它会终止进程。为什么cgroup的内存子系统使用oom-killer而不是返回内存分配失败,当进程允许内存超过cgroup限制?

看来,cgroups可以使用杀手或暂停进程( https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/sec-memory.html )。 但是有了ulimit,分配只是正常的失败。

一些没有答案的问题依然存在:是否有一个让cgroups拒绝进程内存(从malloc返回NULL)? 还是有办法得到ulimit拒绝物理内存(-m),而不是只有虚拟(-v)?