Introducción al Error Too Many Open Files en Linux
Uno de los problemas más frustrantes que enfrentan los administradores de sistemas y desarrolladores en entornos Linux es el error Too Many Open Files (Demasiados archivos abiertos). Este fallo se manifiesta generalmente en servidores web, bases de datos o aplicaciones de alta concurrencia como Nginx, Apache, MySQL o Node.js, provocando caídas inesperadas del servicio.
Causas Principales del Error de Archivos Abiertos
En Linux, absolutamente todo se gestiona como un archivo, incluyendo sockets de red, tuberías (pipes) y directorios. Por defecto, los sistemas operativos establecen un límite estricto en la cantidad de descriptores de archivos que un usuario o un proceso específico puede abrir simultáneamente para evitar ataques de denegación de servicio (DoS) o consumo desmedido de recursos. Cuando una aplicación supera este umbral, el kernel bloquea nuevas solicitudes devolviendo el código de error EMFILE.
Método 1: Comprobar y Modificar los Límites Actuales Temporalmente
Para verificar el límite actual de archivos abiertos permitido para tu usuario actual, ejecuta el siguiente comando en tu terminal:
ulimit -n
Si necesitas incrementar este límite de forma temporal para la sesión actual de la terminal, puedes utilizar el comando ulimit seguido del nuevo valor deseado:
ulimit -n 65535
Ten en cuenta que este cambio se revertirá automáticamente en cuanto cierres la sesión de la terminal actual.
Método 2: Aumentar el Límite de Archivos Abiertos Permanentemente
Para solucionar el problema de raíz y asegurar que el nuevo límite persista tras reiniciar el sistema, debes modificar la configuración del módulo PAM y los límites del sistema operativo.
- Abre el archivo de configuración de límites con privilegios de superusuario:
sudo nano /etc/security/limits.conf - Agrega las siguientes líneas al final del documento para establecer límites estrictos y suaves tanto para usuarios específicos como de forma global:
* soft nofile 65535
* hard nofile 65535
- Guarda los cambios y cierra el editor presionando
Ctrl + O, luegoEnter, y finalmenteCtrl + X.
Método 3: Configurar Systemd para Servicios Específicos
Si la aplicación que genera el error se ejecuta como un servicio gestionado por systemd (por ejemplo, Nginx, Docker o PostgreSQL), el archivo limits.conf podría ser ignorado. Debes configurar el servicio directamente:
- Crea un directorio de anulación para el servicio afectado:
sudo mkdir -p /etc/systemd/system/nombre-servicio.service.d/ - Crea y edita un archivo de configuración de anulación:
sudo nano /etc/systemd/system/nombre-servicio.service.d/override.conf - Añade las siguientes directivas dentro del archivo:
[Service]
LimitNOFILE=65535
- Recarga el demonio de systemd y reinicia el servicio para aplicar los cambios:
sudo systemctl daemon-reload
sudo systemctl restart nombre-servicio