Категорії
Linux

Ограничиваем использование mem, cpu определённому приложению

Этот вопрос очень актуален, например, на десктопе: у меня opera время от времени начинает выедать всю доступную память и весь swap. Было принято решение ограничить её аппетиты.

Банальный ulimit не подходит, так как он ограничит для всех приложений, запускаемых от юзера. А мне нужно что бы только одно приложение и под конкретным пользователем. После недолгих гуглений, натолкнулся на cgroups.

Тестовый стенд: Kubuntu 12.10 (kernel 3.5.0-25-generic x86_64), user = skeletor

Устанавливаем:

$ sudo apt-get install cgroup-bin libcgroup1

Проверям что croup работает:

$ lssubsys -am | grep cgroup
cpuset /sys/fs/cgroup/cpuset
cpu /sys/fs/cgroup/cpu
cpuacct /sys/fs/cgroup/cpuacct
memory /sys/fs/cgroup/memory
devices /sys/fs/cgroup/devices
freezer /sys/fs/cgroup/freezer
blkio /sys/fs/cgroup/blkio
perf_event /sys/fs/cgroup/perf_event

Создаём новый тип ограничений для юзера skeletor:

$ sudo cgcreate -a skeletor -t skeletor -g memory,cpu:skeletor

Если не указать -t (указывает владельца задачи – task’a), то после запуска программы через cgexec получим ругань:

cgroup change of group failed

А теперь собственно задаём ограничения:

– About 10 % cpu

# echo 100 > /sys/fs/cgroup/cpu/skeletor/cpu.shares

– 300 Mb of memory

# echo 300000000 > /sys/fs/cgroup/memory/skeletor/memory.limit_in_bytes

– 100 Mb of swap

# echo 100000000 > /sys/fs/cgroup/memory/skeletor/memory.memsw.max_usage_in_bytes

А теперь собственно запуск нужного приложения:

cgexec -g memory,cpu:$USER command <options> &

В данном случае это будет так:

$ cgexec -g memory,cpu:skeletor /usr/bin/opera &

Проверяем, что интересующие нас процессы попали под наблюдение:

$ ps -e | grep opera
29165 pts/24   00:14:26 opera
29174 pts/24   00:00:24 opera:flashplug
$ cat /sys/fs/cgroup/memory/skeletor/tasks
29165
29168
29174
...
$ cat /sys/fs/cgroup/cpu/skeletor/tasks
29165
29168
29174
...

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff