Добрый день,
Вторые сутки бьюсь над проблемой ограничения ресурсов, и пока не уверен что достиг того что надо. Буду рад, если направите в правильное русло.
Суть задачи.
N пользователей заходят на машину под CentOS 6.4 x64 и запускают любую из 3 программ (prog1,prog2,prog3).
Я очень хочу чтобы каждому юзеру под нужды этой программы выделялось 256M RAM (+256M swap при необходимости), ну и процессорной мощности чуть меньше (но тут вообще сферически-эмпирический подход)
Итак, в /etc/cgconfig.conf пишу
group prog_rules {
cpuacct {
cpuacct.usage="0";
}
cpu {
cpu.rt_period_us=5000000;
cpu.rt_runtime_us=90000;
cpu.shares=80;
}
memory {
memory.limit_in_bytes="256M";
memory.memsw.limit_in_bytes="512M";
memory.swappiness="20";
memory.use_hierarchy="1";
}
}
в /etc/cgrules.conf первое что пришло в голову это
*:prog1 cpu,memory,cpuacct prog_rules/
*:prog2 cpu,memory,cpuacct prog_rules/
*:prog3 cpu,memory,cpuacct prog_rules/
но сильно показалось, что 256M на программу стали делиться между всеми пользователями.
Т.е. user1 запустил prog1 - получил 256М, user2 запустил prog1 - теперь на каждого по 128М, user3 запустил prog1 - теперь 256 делим уже на трех.. Это категорически не подходит.
Решил описать каждого юзера (думаю, это вообще ошибочный путь, ибо пользователей не мало. Идея опичать группы @usergroup:progN cpu,memory.. кажется логичной, но боюсь что лимит будут делиться опять на всех юзеров пропорционально..)
user1:prog1 cpu,memory,cpuacct prog_rules/
user1:prog2 cpu,memory,cpuacct prog_rules/
user1:prog3 cpu,memory,cpuacct prog_rules/
user2:prog1 cpu,memory,cpuacct prog_rules/
user2:prog2 cpu,memory,cpuacct prog_rules/
user2:prog3 cpu,memory,cpuacct prog_rules/
user3:prog1 cpu,memory,cpuacct prog_rules/
user3:prog2 cpu,memory,cpuacct prog_rules/
user3:prog3 cpu,memory,cpuacct prog_rules/
вроде работает, но тупые пользователи умудряются заставить программы работать на пределе всех лимитов, что приводит к адскому свопингу и крайней нестабильности системы..
Может я чтото делаю не так?