使用cgroup限制virtualbox的内存使用量


9

我正在尝试使用cgroup(控制组)限制virtualbox的内存使用量,但是它似乎无法正常工作。

我的机器是:

$ uname -a
Linux fc.bgi 2.6.40-4.fc15.i686 #1 SMP Fri Jul 29 18:54:39 UTC 2011 i686 i686 i386 GNU/Linux

我试图让它像这样工作:

  1. 在内存层次结构下创建新的cgroup:

    $ cgcreate -g memory:vbox
    
  2. 为vbox设置memory.limit_in_bytes:

    $ cgset -r memory.limit_in_bytes=512M vbox
    
  3. 将运行pid的vbox分组为vbox:

    $ cgclassify -g memory:vbox 20015
    

有人可以解释为什么这行不通吗?

Answers:


3

您可以在您放置的此文件中使用/etc/security/limits.conf限制内存使用量:

domain type item value

domain@groupnametypehardsoft哪里hard是LIMT不能在任何情况下被超过。

item项目字段指定要限制的项目类型。示例包括core(核心文件的大小),data(程序的数据区域的大小),fsize(用户创建的文件的大小),nofile(打开的数据文件的数量),rss(驻留集)大小),堆栈(堆栈大小),cpu(单个进程的CPU时间,以分钟为单位),nproc(并发进程数),maxlogins(并发登录数)和优先级(进程优先级)。数据,rss和堆栈项都与程序消耗的内存有关。这些和其他数据容量度量以千字节为单位。

valueitem您选择的字段相关,例如,如果您cpuitem字段中选择并放入2value则如果domain(您的VirtualBox组)所花费的时间超过2cpu时间,它将被终止。

您也可以使用ulimit,但仅限于bash shell。

希望这可以帮助您实现目标,尽管您所要求的方法还没有完成。


1

我猜您的/etc/cgconfig.conf文件有问题。此设置对我有用:

[root@localhost cgroup]# cat /etc/cgconfig.conf
mount {
    memory  = /cgroup/memory;
}

[root@localhost cgroup]# service cgconfig start
Starting cgconfig service:                                 [  OK  ]
[root@localhost cgroup]# ls
memory
[root@localhost cgroup]# ls memory/
cgroup.event_control  memory.limit_in_bytes        memory.memsw.max_usage_in_bytes  memory.soft_limit_in_bytes  memory.use_hierarchy
cgroup.procs          memory.max_usage_in_bytes    memory.memsw.usage_in_bytes      memory.stat                 notify_on_release
memory.failcnt        memory.memsw.failcnt         memory.move_charge_at_immigrate  memory.swappiness           release_agent
memory.force_empty    memory.memsw.limit_in_bytes  memory.oom_control               memory.usage_in_bytes       tasks
[root@localhost cgroup]# cgcreate -g memory:vbox
[root@localhost cgroup]# cgset -r memory.limit_in_bytes=512M vbox
[root@localhost cgroup]# cgclassify -g memory:vbox 11727
[root@localhost cgroup]# cat memory/vbox/tasks 
11727

但是,建议您不要创建包含这些设置的文件,而不要使用cgreateand cgset命令,/etc/cgconfig.conf这样您不必在每次重新启动后都重复该过程。在您的情况下,文件如下所示:

[root@localhost cgroup]# cat /etc/cgconfig.conf
mount {
    memory  = /cgroup/memory;
}

group vbox {
    memory {
        memory.limit_in_bytes="536870912";
    }
}

现在,每次启动cgconfig服务时,您都将准备好vbox cgroup。所需要做的就是仅/cgroups/memory/vbox/tasks使用该文件中的数字将虚拟箱的PID移入文件。cgclassifyecho

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.