El comando ulimit en Linux permite limitar los recursos disponibles para la shell y sus procesos hijos. Estos límites incluyen el número máximo de archivos abiertos, la cantidad máxima de memoria virtual, el tamaño del archivo de volcado (core) y mucho más.
El comando ulimit es una herramienta importante para gestionar los recursos disponibles, evitando situaciones en las que un proceso pueda bloquear todos los recursos del sistema. También ayuda a mantener la estabilidad del sistema limitando los recursos por usuario y por proceso.
En este artículo revisaremos el comando ulimit y daremos ejemplos de su uso. También se abordarán aspectos prácticos de su aplicación.
2. Tipos de límites
Los límites gestionados por el comando ulimit se pueden dividir en dos tipos: límites duros y blandos. Vamos a analizarlos con más detalle.
2.1. Límites blandos
Los límites blandos son valores que se pueden cambiar dentro de los límites duros. Permiten modificar temporalmente los límites de recursos para un proceso concreto.
$ ulimit -a tamaño del archivo core (bloques, -c) 0 tamaño del segmento de datos (KB, -d) ilimitado prioridad de planificación (-e) 0 tamaño de archivo (bloques, -f) ilimitado señales pendientes (-i) 46867 tamaño máximo de memoria (KB, -l) 65536 [...]
La salida del comando muestra los límites blandos actuales para todos los recursos del sistema.
2.2. Límites duros
Los límites duros son los valores máximos de recursos que se pueden establecer para un usuario o proceso. Estos límites solo pueden ser modificados por el superusuario. Los límites duros fijan parámetros estrictos para el uso de recursos, evitando abusos.
3. Uso
El comando ulimit está integrado en el intérprete Bash y está disponible por defecto en todas las distribuciones de Linux.
3.1. Establecer límite de tamaño de archivo
Para limitar el tamaño máximo de archivo que pueden crear la shell y sus procesos hijos se utiliza la opción -f. Esto es útil para evitar el llenado del disco.
$ ulimit -f 1024
Este comando establecerá un límite blando en el tamaño de archivo de 1024 bloques (512 KB).
3.2. Aumentar el número de descriptores de archivos abiertos
Para limitar el número de descriptores de archivos abiertos simultáneamente se usa la opción -n. Es útil para servidores que manejan muchos archivos.
$ ulimit -n 4096
Esto establecerá un límite de 4096 descriptores de archivo.
3.3. Limitar el tiempo de CPU
La opción -t permite limitar el tiempo máximo de CPU para un proceso.
$ ulimit -t 120
Este límite es útil para evitar el uso excesivo de recursos por procesos individuales.
4. Aplicación práctica
4.1. Evitar la sobrecarga del sistema
El comando ulimit ayuda a prevenir la sobrecarga del sistema, limitando los recursos disponibles para procesos individuales, lo que es especialmente útil para protegerse contra ataques DoS.
4.2. Mejora de la seguridad
Limitar el tamaño de los archivos core y otros recursos ayuda a mejorar la seguridad del sistema, evitando fugas de datos.
4.3. Desarrollo y pruebas
Los desarrolladores pueden usar ulimit para simular condiciones con recursos limitados y probar sus aplicaciones en situaciones de estrés.
4.4. Optimización del rendimiento del sistema
Establecer límites en recursos como descriptores de archivo puede mejorar el rendimiento general del sistema y evitar el agotamiento de recursos críticos.
5. Guardar límites
Los cambios realizados con ulimit se aplican solo en la sesión actual y no se conservan tras reiniciar el sistema.
Para hacer los límites permanentes, se pueden modificar los archivos ~/.bashrc o /etc/security/limits.conf.
* hard nofile 4096 * soft nofile 1024
Estas líneas establecen los límites duros y blandos en la cantidad de descriptores de archivos abiertos.
6. Conclusión
En este artículo hemos estudiado el comando ulimit en Linux, su uso para gestionar los recursos del sistema y ejemplos prácticos de su aplicación. Comprender las capacidades de ulimit le ayudará a mantener el funcionamiento estable y seguro de su sistema.