限制每个用户的私有内存使用量

我正在使用内存控制器的cgroups设置每个用户的内存限制(使用memory.limit_in_bytes设置)。

问题是这个设置也帐户caching使用情况。 因此,如果限制为1GB,并且用户仅下载或复制1GB文件,则其进程将被终止。 更糟糕的是,caching的页面仍然保留在内存中,所以即使运行零进程,用户的“内存使用量”仍然接近1GB。

自然,这是没有意义的。 我只想限制每个用户的总私有(非匿名)内存使用量。 我怎样才能做到这一点?

或者,让OOM杀手在去掉杀死进程之前尝试删除用户的caching页面,甚至不释放caching的页面。

发布我认为可能是更好的答案。

我的要求是防止一个用户的失控进程崩溃整个系统。

Linux已经有一个function可以做到这一点:OOM杀手。

当系统耗尽内存时, OOM杀手会运行,并且支持快速消耗大量内存的进程。 杀死长时间运行/系统(超级用户)进程的可能性也较小。

通过调整/proc/<pid>/oom_score_adj文件可以进一步调整OOM杀手。 该设置由subprocessinheritance,因此您只需要将其设置在每个用户的根进程上。 (参见Documentation / filesystems / proc.txt ,3.1节)