Використовуйте 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. Угрупування запущеного pid vbox у vbox:

    $ cgclassify -g memory:vbox 20015
    

Може хтось пояснить, чому це не працює?

Відповіді:


3

ви можете обмежити використання пам'яті за допомогою /etc/security/limits.conf у цьому файлі, який ви поклали:

domain type item value

де domainє @groupname, typeє hardабо softде hardє обмеженням, яке не можна перевищити ні за яких обставин.

itemце поле, яке вказує, який тип товару обмежений. Приклади включають ядро ​​(розмір основних файлів), дані (розмір області даних програми), fsize (розмір файлів, створених користувачем), nofile (кількість відкритих файлів даних), rss (резидентний набір розмір), стек (розмір стека), процесор (час процесора одного процесу в хвилинах), nproc (кількість одночасних процесів), маклогіни (кількість одночасних входів) та пріоритет (пріоритет процесу). Елементи даних, rss та стеки відносяться до пам'яті, спожитої програмою. Ці та інші заходи ємності даних вимірюються в кілобайтах.

і valueце відноситься до itemобласті , що ви повинні вибрати, наприклад , якщо у вас є вибрали cpuв itemполе і покласти 2в valueто в разі 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число у цьому файлі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.