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 por 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: los /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 ejemplo, 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 por defecto lee 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
expediente.
Por ejemplo, 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
expediente. 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 de procesos para un usuario. Espero que haya disfrutado de la lectura y deje sus sugerencias o comentarios en la sección de comentarios.
Leer también: