Cómo limitar el proceso a nivel de usuario en Linux

Cuando el sistema se usa mucho, sería un gran desafío para los administradores del sistema administrar los recursos. Ulimit (límite de usuario) es un comando poderoso que ayuda a limitar los recursos en su sistema.

En algún momento, pero no muy a menudo, un solo usuario puede iniciar demasiados procesos para hacer que el sistema sea inestable. Para mitigar esto, podemos usar el comando ulimit para limitar el número de procesos que cada usuario o grupo puede ejecutar.

En este tutorial, aprendemos cómo limitar el proceso a nivel de usuario en Linux.

Con ulimit puede establecer dos tipos de límites:

  • Límite duro: Este límite es por motivos de seguridad. El límite estricto solo se puede aumentar mediante root (es decir, un proceso que no sea root no puede superar un límite estricto)
  • Límite suave: Este límite se puede cambiar por proceso en cualquier momento. Un no usuario puede establecer un límite entre (0 y límite estricto) para sus procesos.

Verifique todos los límites actuales

Puede verificar todos los límites para el usuario actualmente conectado.

Ejecute el siguiente comando ulimit con -a opción:

$ ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 3177
max locked memory       (kbytes, -l) 16384
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 3177
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Puede ver que hay algunas configuraciones ilimitadas. Estos límites se pueden cambiar.

Nota: El /proc file-system almacena los límites por proceso en el objeto del sistema de archivos ubicado en /proc/4548/limits, donde ‘4548’ es el PID del proceso o el identificador del proceso.

Establecer ulimit para el usuario

Puedes usar ulimit -u para encontrar los procesos de usuario máximo o el límite de nproc.

$ ulimit -u
3177

Puede cambiar los procesos de usuario máximo con el siguiente comando:

# ulimit -u 3500

Si obtiene algún error o no puede cambiar, compruebe si ha establecido algún límite en ‘/etc/security/limits.conf’.

Se pueden establecer límites para usuarios o grupos específicos en el archivo limits.con.

Si desea configurar ‘infrateam’ para que tenga más procesos que ‘probadores’ y limitar el usuario bob nproc a ’60’, configure lo siguiente:

@bob          hard    nproc         60
@testers      hard    nproc         100 
@infrateam    hard    nproc         300

Aquí establecemos un límite para abrir archivos usando el campo ‘nofile’. A medida que establezcamos un límite suave, el usuario recibirá advertencias cuando alcance el límite inferior.

@infrateam   soft   nofile   2000
@infrateam   hard   nofile   3000

Establecer Ulimit para archivo abierto

Podemos usar el comando ulimit para ver los límites de archivos abiertos para cada usuario.

Verifique el límite estricto de archivos abiertos a nivel de usuario

$ ulimit -Hn

4096

Verifique el límite flexible de archivos abiertos a nivel de usuario

# ulimit -Sn

1024

Si desea cambiar los límites actuales de archivos abiertos (suaves o estrictos), puede actualizarlos en el archivo ‘limits.conf’.

En nuestro example, estableceremos el número máximo de archivos en 16384 para todos los usuarios del sistema.

# vim /etc/security/limits.conf
# Then you can add two lines for each limit:
* soft nofile 16384
* hard nofile 16384

Reinicie su máquina y pruebe la nueva configuración de límites

Para verificar el número máximo actual de archivos abiertos en todo el sistema Linux, ejecute el siguiente comando:

# cat /proc/sys/fs/file-max
80786

Para cambiar el número máximo de archivos abiertos, ejecute los siguientes comandos:

# sysctl -w fs.file-max=90786

para que sea persistente después de reiniciar la actualización en el archivo ‘sysctl.conf’

# vi /etc/sysctl.conf
fs.file-max=90786

Establecer límite de usuario a través de systemd

Anteriormente discutimos que podemos establecer límites editando el /etc/security/limits.conf archivo pero systemd ignoraría este archivo.

Systemd lee por defecto del archivo ‘/etc/systemd/system.conf’. A continuación se muestran los límites de systemd equivalentes a ulimits.

Directive        ulimit equivalent     Unit
LimitCPU=        ulimit -t             Seconds      
LimitFSIZE=      ulimit -f             Bytes
LimitDATA=       ulimit -d             Bytes
LimitSTACK=      ulimit -s             Bytes
LimitCORE=       ulimit -c             Bytes
LimitRSS=        ulimit -m             Bytes
LimitNOFILE=     ulimit -n             Number of File Descriptors 
LimitAS=         ulimit -v             Bytes
LimitNPROC=      ulimit -u             Number of Processes 
LimitMEMLOCK=    ulimit -l             Bytes
LimitLOCKS=      ulimit -x             Number of Locks 
LimitSIGPENDING= ulimit -i             Number of Queued Signals 
LimitMSGQUEUE=   ulimit -q             Bytes
LimitNICE=       ulimit -e             Nice Level 
LimitRTPRIO=     ulimit -r             Realtime Priority  
LimitRTTIME=     No equivalent

Puede establecer el límite de usuarios editando el /etc/systemd/user.conf Archivo.

Para example, puede intentar lo siguiente:

vim /etc/systemd/user.conf
DefaultLimitNOFILE=20000

Algunos servicios que se inician a través de systemd ignoran la /etc/security/limits.conf Archivo. Para enfrentar este problema, debe establecer los límites en el archivo de definición del servicio.

Debe actualizar el archivo de servicio de la siguiente manera:

[Unit]
Description=Some Daemon
After=syslog.target network.target

[Service]
Type=notify
LimitNOFILE=20000
ExecStart=/usr/sbin/somedaemon

[Install]
WantedBy=multi-user.target

Conclusión

En este tutorial, aprendimos cómo usar el comando ulimit para establecer límites para los procesos de un usuario. Espero que haya disfrutado de la lectura y deje sus sugerencias o comentarios en la sección de comentarios.

Leer también:

  • 2 formas de limitar el uso de CPU de un proceso en Linux