¿Qué es el error Too Many Open Files en Linux?
El error Too Many Open Files (Demasiados archivos abiertos) es un problema común en sistemas operativos basados en Linux que ocurre cuando un proceso o el sistema en su conjunto alcanza el límite máximo permitido de descriptores de archivos abiertos simultáneamente. En Linux, prácticamente todo es un archivo, incluyendo sockets de red, tuberías, directorios y archivos físicos.
Causas principales del error
Este fallo suele presentarse en servidores web de alto rendimiento (como Nginx o Apache), bases de datos o aplicaciones con fugas de descriptores de archivos. Las causas más frecuentes incluyen:
- Un límite predeterminado del sistema operativo demasiado bajo para la carga de trabajo actual.
- Aplicaciones que abren conexiones o archivos sin cerrarlos adecuadamente tras su uso.
- Configuraciones restrictivas en los límites por usuario definidos en el archivo
limits.conf.
Método 1: Comprobar y aumentar los límites temporalmente con Ulimit
Antes de aplicar cambios permanentes, puedes verificar el límite actual de tu usuario y aumentarlo de manera temporal utilizando el comando ulimit.
- Abre tu terminal de Linux.
- Ejecuta el siguiente comando para ver el límite actual de archivos abiertos:
ulimit -n - Para incrementar este límite temporalmente a un valor mayor, por ejemplo 65535, ejecuta:
ulimit -n 65535 - Nota que este cambio solo afectará a la sesión actual de la terminal y se revertirá al reiniciar.
Método 2: Configurar los límites de forma permanente en limits.conf
Para solucionar el problema de manera definitiva, debes modificar la configuración de los límites del sistema para los usuarios.
- Abre el archivo de configuración con privilegios de administrador usando tu editor preferido:
sudo nano /etc/security/limits.conf - Agrega las siguientes líneas al final del archivo para aumentar los límites tanto suaves (soft) como duros (hard) para todos los usuarios:
* soft nofile 65535y* hard nofile 65535 - Guarda los cambios y cierra el editor.
- Asegúrate de que el módulo PAM cargue estos límites editando el archivo
/etc/pam.d/common-sessiony añadiendo:session required pam_limits.so
Método 3: Ajustar el límite global del sistema en Sysctl
Si el problema persiste a nivel general del sistema operativo, es necesario modificar el parámetro del kernel correspondiente.
- Abre el archivo de configuración sysctl:
sudo nano /etc/sysctl.conf - Añade la siguiente línea para definir el número máximo global de archivos abiertos:
fs.file-max = 2097152 - Guarda el archivo y aplica los cambios ejecutando el comando:
sudo sysctl -p - Reinicia tu servicio o servidor para que surtan efecto todos los cambios aplicados.