О, но cgroups легки :) Установите пакет libcgroup. Создайте /etc/cgconfig.conf:
mount {
cpu = /cgroup/cpu_and_mem;
cpuacct = /cgroup/cpu_and_mem;
memory = /cgroup/cpu_and_mem;
}
group sshd {
cpu {
cpu.shares="500";
}
cpuacct {
cpuacct.usage="0";
}
memory {
memory.limit_in_bytes="1G";
}
}
group nosshd {
cpu {
cpu.shares="500";
}
cpuacct {
cpuacct.usage="0";
}
memory {
memory.limit_in_bytes="1G";
}
}
Запустите cgconfig
процесс, который создаст иерархию, cgroups и установит ограничения. Если это удастся, у вас есть две cgroups, каждая из которых имеет 50% назначенного ЦП и 1 ГБ доступной памяти (не знаю, каков ваш фактический объем доступной памяти; в этом примере предполагается, что это 2 ГБ). Теперь вам просто нужно переместить все задачи (т.е. все процессы, работающие в системе) из корневой группы в группу nosshd:
cgroup]# cat tasks >> nosshd/tasks
cgroup]# echo > tasks
Тогда вам просто нужно получить PID sshd
процесса и переместить его в файл задач sshd:
cgroup]# echo $PID >> sshd/tasks
Та-да, все готово. Теперь вы можете быть уверены, что у sshd всегда будет 50% ЦП и 1 ГБ памяти.