Используйте cgroup для ограничения использования памяти virtualbox

9

Я пытаюсь использовать cgroup(Control Group), чтобы ограничить использование памяти 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. Создание новых групп в иерархии памяти:

    $ cgcreate -g memory:vbox
    
  2. Установка memory.limit_in_bytes для vbox:

    $ cgset -r memory.limit_in_bytes=512M vbox
    
  3. Группировка vbox с запущенным pid к vbox:

    $ cgclassify -g memory:vbox 20015
    

Может кто-нибудь объяснить, почему это не работает?

Жиль "ТАК - перестань быть злым"
источник

Ответы:

3

Вы можете ограничить использование памяти с помощью /etc/security/limits.conf в этом файле, который вы поместите:

domain type item value

где domainесть @groupname, typeесть hardили softгде hardесть Нт , который не может быть превышен ни при каких обстоятельствах.

itemПоле элемента указывает, какой тип элемента ограничен. Примеры включают в себя core (размер основных файлов), data (размер области данных программы), fsize (размер файлов, создаваемых пользователем), nofile (количество открытых файлов данных), rss (резидентный набор size), stack (размер стека), cpu (время процессора одного процесса в минутах), nproc (количество одновременных процессов), maxlogins (количество одновременных входов в систему) и приоритет (приоритет процесса). Элементы данных, rss и стека относятся к памяти, используемой программой. Эти и другие показатели емкости данных измеряются в килобайтах.

и valueотносится к itemобласти, которую вы выбрали, например, если вы выбрали cpuв itemполе и вставили 2в значение valuethen, если domain(ваша группа VirtualBox) занимает больше 2времени процессора, оно будет прервано.

Вы также можете использовать ulimit, но это ограничено только оболочкой bash.

Надеюсь, что это поможет вам в вашей цели, хотя это не сделано с помощью метода, который вы просили.

Ханан Н.
источник
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

Хотя, вместо использования cgreateи 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. Все, что нужно, это переместить PID виртуальной коробки в /cgroups/memory/vbox/tasksфайл, используя либо cgclassifyпросто echoчисло в этом файле, либо просто .

mart1n
источник