Ah, pero los cgroups son fáciles :) Instale el paquete libcgroup. Cree un /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";
}
}
Inicie el cgconfig
proceso que creará la jerarquía, cgroups y establecerá los límites. Si eso tiene éxito, tiene dos grupos c, los cuales tienen el 50% de la CPU asignada y 1G de memoria disponible (no sé cuál es su cantidad real de memoria disponible; suponiendo que sea 2G en este ejemplo). Ahora solo necesita mover todas las tareas (es decir, todos los procesos que se ejecutan en el sistema) desde el grupo raíz al grupo nosshd:
cgroup]# cat tasks >> nosshd/tasks
cgroup]# echo > tasks
Luego solo necesita obtener el PID del sshd
proceso y moverlo a la información del archivo de tareas sshd:
cgroup]# echo $PID >> sshd/tasks
Ta-da, ya terminaste. Ahora puede estar seguro de que sshd siempre tendrá el 50% de la CPU y 1G de memoria.