以下问题在运行 Ubuntu 10.04 和 2.6.32-22-generic 内核的机器上发生:设置进程的驻留集大小 (RSS) 限制似乎没有任何效果。我目前使用以下代码在 Python 中设置了限制:
import resource
# (100, 100) is the (soft, hard) limit. ~100kb.
resource.setrlimit(resource.RLIMIT_RSS, (100, 100))
memory_sink = ['a']*10000000 # this should fail
列表 memory_sink 每次都成功。当我用 top 检查 RSS 使用情况时,我可以很容易地让进程使用 1gb 的 RAM,这意味着限制不起作用。 RSS 限制不适用于此内核或发行版吗?如果有帮助,resource.RLIMIT_NPROC(用户进程限制)确实有效。
最佳答案
您可以使用 cgroups 完成此操作。长版在我的blog ,但短版(在 Ubuntu 11.04 上测试)是:
安装
cgroup-bin
包。编辑
/etc/cgconfig.config
并创建一个内存有限的组。为了 例如,我补充说:group limited { memory { memory.limit_in_bytes = 50M; } }
运行
$ sudo restart cgconfig $ sudo chown -R jlebar /sys/fs/cgroup/memory/limited $ cgexec -g memory:limited your/program
当我要求它只使用 50M 时,我观察到我的进程的 RSS 为 93M,但这对我来说不是问题,因为我的目标只是让程序进入页面。
cgclassify
也允许您将限制附加到正在运行的进程。注意 RSS 仅适用于限制生效后分配的内存。
关于python - 驻留集大小 (RSS) 限制无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3043709/