Linux 为什么是cgroup’;当进程允许内存超过cgroup限制?;

Linux 为什么是cgroup’;当进程允许内存超过cgroup限制?;,linux,linux-kernel,redhat,cgroups,Linux,Linux Kernel,Redhat,Cgroups,我们使用cgroup限制程序来使用更多的资源 但,当cgroup中的内存超过限制时,它将终止进程 当进程允许内存超过cgroup限制时,为什么cgroup的内存子系统使用oom killer而不是返回内存分配失败?似乎cgroup可以使用oom killer或暂停进程()。但对于ulimit,分配通常会失败 还有一些未回答的问题:是否有一种方法可以让cgroup拒绝进程内存(从malloc返回NULL)?或者有没有办法让ulimit拒绝物理内存(-m)而不仅仅是虚拟内存(-v)?如果您想得到更好

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

似乎cgroup可以使用oom killer或暂停进程()。但对于ulimit,分配通常会失败


还有一些未回答的问题:是否有一种方法可以让cgroup拒绝进程内存(从malloc返回NULL)?或者有没有办法让ulimit拒绝物理内存(-m)而不仅仅是虚拟内存(-v)?

如果您想得到更好的回答,请用更多细节重新表述这个问题。最好共享cgroup conf和更多详细信息。最好至少知道以下几点:您使用哪个内核?您使用软内存限制还是硬内存限制?但是,整个cgroup配置会更好(特别是如果它是非平凡的)。也就是说,除非内存确实不足(使用了所有内存和交换),否则cgroup内存子系统不会杀死进程。我使用2.6.32内核,并使用硬内存限制。我测试mysql,用尽所有cgroup内存。我不使用交换。它会发出oom,并发出oom kill。我希望内核会返回错误,当他们无法分发页面但oom终止或挂起时。禁用过度限制的malloc可能是一种方法。