Limitar la RAM de los usuarios con cgroups no funciona (para mí)

Limitar la RAM de los usuarios con cgroups no funciona (para mí)

Me registré porque no pude ejecutar cgroups con varios tutoriales/comentarios/lo que sea que encuentres en google. Quiero limitar la cantidad de RAM que puede usar un usuario específico. Internet dice "cgroups". Mi servidor de pruebas ejecuta Ubuntu 14.04. Puede dividir los tutoriales mencionados en dos categorías. Establezca límites directamente usando echo y use una configuración específica. Ninguno de los dos funciona para mí.

Establecer límites usando eco

cgcreate -g cpu,cpuacct,...:/my_group

termina sin avisos. Cuando intento correr

echo 100M > memory.limit_in_bytes

simplemente dice "no permitido" incluso cuando se usa sudo. Ni siquiera llego al punto de limitar a otro usuario.

Establecer límites usando config

Leí sobre dos archivos de configuración. Así que aquí están mis archivos de configuración:

cgconfig.conf

mount {
    memory  = /cgroup/memory;
}

group limit_grp {
        memory {
                memory.limit_in_bytes=100M;
                memory.memsw.limit_in_bytes=125M;
        }
}

cgrules.conf

testuser    memory    limit_grp

cuando corro

cgconfigparser -l /etc/cgconfig.conf

se monta en systemd. Ahora inicio sesión con testuser, ejecuto una tarea que requiere mucha memoria y se ejecuta sin preocuparme por mi límite.

Intenté reiniciar, nada cambió. Incluso algunos intentos extraños usando la configuración del kernel no funcionaron. Soy nuevo en cgroups y no esperaba que fuera tan complicado. Agradecería cualquier sugerencia sobre mi tema. ¡Gracias de antemano!

Respuesta1

La razón por la que está viendo este comportamiento probablemente se debe al hecho de que su sesión de inicio de sesión ya tiene un grupo de límite de memoria asociado y el proceso lo hereda, de acuerdo con la configuración de systemd.

Verifique su proceso en ejecución cgroup con:

cat /proc/pid/cgroup

...y es posible que veas algo como:

13:name=systemd:/user/0.user/2.session
12:debug:/
11:pids:/
10:net_prio:/user/0.user/2.session
9:perf_event:/user/0.user/2.session
8:net_cls:/user/0.user/2.session
7:freezer:/user/0.user/2.session
6:devices:/user/0.user/2.session
5:memory:/user/0.user/2.session
4:blkio:/user/0.user/2.session
3:cpuacct:/user/0.user/2.session
2:cpu:/
1:cpuset:/

Suponiendo que no desea este comportamiento, puede usar su cgroup personalizado con el controlador de memoria editando /etc/systemd/logind.confy eliminando memoryde la Controllerslínea.

Respuesta2

Tuve un problema similar (aunque en Fedora 29): parecía que mi problema /etc/cgconfig.conffue completamente ignorado. Correr

sudo systemctl enable cgconfig

y reiniciar resolvió el problema.

información relacionada