驻留集大小(RSS)限制无效

Bra*_*ore 16 python resources limits pam ulimit

在运行带有2.6.32-22通用内核的Ubuntu 10.04的计算机上会出现以下问题:设置进程的驻留集大小(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
Run Code Online (Sandbox Code Playgroud)

列表memory_sink每次都成功.当我使用top检查RSS使用情况时,我可以轻松地使用1gb的RAM进程,这意味着限制无效.RSS限制不适用于此内核或发行版吗?如果有帮助,resource.RLIMIT_NPROC(用户进程限制)确实有效.

Jus*_* L. 20

您可以使用cgroups完成此操作.长版本在我的博客上,但是短版本(在Ubuntu 11.04上测试)是:

  • 安装cgroup-bin包.

  • 编辑/etc/cgconfig.config并创建内存有限的组.例如,我补充说:

    group limited {
      memory {
        memory.limit_in_bytes = 50M;
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • $ sudo restart cgconfig
    $ sudo chown -R jlebar /sys/fs/cgroup/memory/limited
    $ cgexec -g memory:limited your/program
    

当我要求它只使用50M时,我用93M的RSS观察了我的过程,但这对我来说不是问题,因为我的目标只是让程序进入页面.

cgclassify允许您对正在运行的进程附加限制.RSS注意这仅适用于限制生效后分配的内存.

  • 在Ubuntu 10.04上,我只是在尝试运行`sudo restart cgconfig`命令时收到错误消息`restart:Unknown job:cgconfig`.:( (2认同)

Mad*_*ist 13

形成getrlimit联机帮助页:

RLIMIT_RSS
Specifies the limit (in pages) of  the  process's  resident  set
(the  number of virtual pages resident in RAM).  This limit only
has effect in Linux 2.4.x, x < 30, and there only affects  calls
to madvise(2) specifying MADV_WILLNEED.
Run Code Online (Sandbox Code Playgroud)

看起来这在Linux内核2.6上是不受支持的.