Limitar los recursos de procesos con systemd en linux.
Por defecto, systemd establece unos límites predeterminados a los procesos que se inician. En sistemas con grandes cargas de trabajo, es posible que este límite sea demasiado pequeño.
Algunas aplicaciones o procesos específicos, pueden necesitar unos valores de recursos más altos que los asignados por el sistema. Por suerte este problema tiene solución, además bastante simple.
En el artículo de hoy veremos como aumentar este límite (a nivel global), o reducirlo si es necesario. También aprenderemos a realizar la misma operación, pero… a un proceso específico.
Limitar los recursos de procesos con systemd
Normalmente, la regla que permite aumentar el valor global viene comentada de forma predeterminada. Puedes verificarlo con el siguiente comando.
cat /etc/systemd/system.conf | grep DefaultLimitMEMLOCK
ejemplo de salida…
sololinux # cat /etc/systemd/system.conf | grep DefaultLimitMEMLOCK
#DefaultLimitMEMLOCK=
Ahora modificamos / agregamos un valor.
sudo nano /etc/systemd/system.conf
Busca la linea «#DefaultLimitMEMLOCK=».
Limitar los recursos de procesos en DefaultLimitMEMLOCK
Descomenta la linea y agregas un valor, por ejemplo si quisiéramos poner una limitación general de 128k…
#DefaultLimitNOFILE= #DefaultLimitAS= #DefaultLimitNPROC= DefaultLimitMEMLOCK=128000 #DefaultLimitLOCKS= #DefaultLimitSIGPENDING= #DefaultLimitMSGQUEUE=
Guarda el archivo, cierra el editor y reinicia el sistema.
sudo reboot
Si queremos limitar o aumentar un proceso específico, la forma de operar es un poco diferente. Primero lo identificamos, así que ejecuta el comando systemctl.
sudo systemctl
En nuestro ejemplo queremos modificar el sshd.service. Ejecutamos status para identificar su ruta.
sudo systemctl status sshd.service
Identificamos la ruta en: /usr/lib/systemd/system/sshd.service (puede variar dependiendo de tu distribución linux).
[root@62 ~]# systemctl status sshd.service ● sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled) Active: active (running) since sáb 2020-05-23 07:03:25 CEST; 3 days ago Docs: man:sshd(8) man:sshd_config(5) Main PID: 1066 (sshd) CGroup: /system.slice/sshd.service └─1066 /usr/sbin/sshd -D
Editamos el archivo del servicio que nos interesa.
sudo nano /usr/lib/systemd/system/sshd.service
Nos aparece algo similar a…
[Unit] Description=OpenSSH server daemon Documentation=man:sshd(8) man:sshd_config(5) After=network.target sshd-keygen.service Wants=sshd-keygen.service [Service] Type=notify EnvironmentFile=/etc/sysconfig/sshd ExecStart=/usr/sbin/sshd -D $OPTIONS ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target
Lo que haremos es agregar la siguiente linea (a continuación de ExecStart).
LimitMEMLOCK=128000
El resultado será más o menos así.
[Unit] Description=OpenSSH server daemon Documentation=man:sshd(8) man:sshd_config(5) After=network.target sshd-keygen.service Wants=sshd-keygen.service [Service] Type=notify EnvironmentFile=/etc/sysconfig/sshd ExecStart=/usr/sbin/sshd -D $OPTIONS LimitMEMLOCK=128000 ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target
Guarda el archivo, cierra el editor y reinicia el sistema.
reboot
Este manual ha sido verificado en: CentOS 7, Ubuntu 18.04 y Linux Mint 18.3. Limitar los recursos de procesos con systemd en linux.
Canales de Telegram: Canal SoloLinux – Canal SoloWordpress
Espero que este artículo te sea de utilidad, puedes ayudarnos a mantener el servidor con una donación (paypal), o también colaborar con el simple gesto de compartir nuestros artículos en tu sitio web, blog, foro o redes sociales. Limitar los recursos de procesos con systemd en linux.
No conocia esta funcion. Muchas gracias por tus aportes.
Hola Genaro.
La verdad es que normalmente no es necesario modificar esos valores, pero si es cierto que en ciertas circunstancias especiales te puede sacar de algún apuro.
Hola ¿esto se puede hacer también limitando el uso de cpu para un servicio en concreto? ¿Y si es que se puede cual sería el valor?
Hola Carlos, por poder… claro que se puede. El valor depende de tus necesidades y del resto de procesos que necesites (debes calcular la cpu x nucleos totales).