如何为特定用户设置 RAM 限制?我尝试编辑文件/etc/security/limits.conf
并设置 RAM 限制,但仍然看到用户进程超出设置的限制。
我知道限制是以 kb 为单位指定的,因此我使用的数字没有错误。
例如,我尝试进行设置,以便用户不能使用超过 2,048mb(或 2,097,152kb)的内存,而他们的程序将使用 2500mb 左右的内存。
有没有办法不用虚拟机就能实现这一点?我也试图避免运行虚拟机。
这是我的/etc/sysconfig/limits.conf
。
此外,由于我运行的内核版本是 2.6.18,因此 RSS 限制被忽略
答案1
与内存相关的控制是通过每个进程的资源限制来强制执行的。在 Linux 下,与内存相关的进程限制长期以来一直存在部分问题。例如:
$ (ulimit -m 1; emacs)
如果 Emacs 启动,显然 RSS 资源限制没有被强制执行。我见过有效的限制是数据段和堆栈限制。
$ (ulimit -d 1; emacs)
emacs: Memory exhausted--use M-x save-some-buffers RET
$ (ulimit -s 1; emacs)
$
因此仅使用“数据”和“堆栈”内存限制,因为这些似乎是强制执行的。
答案2
要限制一组进程、用户或组的可用资源,您可以使用cgroups
:
https://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt