EMFILE (errno 24)
errno 24
Mensaje oficial (tal como aparece en pantalla): Too many open files
También se busca como: Too many open files, errno 24, EMFILE: too many open files
Qué significa
EMFILE, 'Too many open files' (errno 24), significa que un proceso ha alcanzado su límite de descriptores de archivo abiertos. Cuentan todos los sockets, archivos y tuberías. Lo sufren los servidores con mucha carga, los observadores de archivos y el código con fugas; el límite es por proceso (ENFILE es el equivalente a nivel de todo el sistema).
Se aplica a: Linux, macOS (BSD errno), WSL, Contenedores Docker
Cómo solucionar EMFILE (errno 24)
- Comprueba el límite actual con 'ulimit -n' y el uso del proceso con 'ls /proc/<pid>/fd | wc -l'
- Averigua qué hay abierto con 'lsof -p <pid> | awk "{print \$5}" | sort | uniq -c' para detectar una fuga (miles de sockets o el mismo archivo)
- Aumenta el límite de la shell durante la sesión con 'ulimit -n 65535' (hasta el límite duro)
- En servicios de systemd, define 'LimitNOFILE=65535' en la sección [Service] de la unidad, y luego ejecuta 'systemctl daemon-reload' y reinicia
- Para sesiones de inicio de sesión, define los límites nofile en /etc/security/limits.conf
- Corrige las fugas en el código: cierra archivos y sockets en bloques finally/with y reutiliza las conexiones HTTP con un pool
- En macOS, revisa 'launchctl limit maxfiles' y aumenta 'ulimit -n' en la shell
Por qué ocurre
Cada proceso tiene un límite blando RLIMIT_NOFILE, a menudo de 1024 por defecto. La alta concurrencia, los observadores de archivos en árboles grandes y las fugas de descriptores hacen que los procesos lo superen.
Preguntas frecuentes
¿Cuál es la diferencia entre EMFILE y ENFILE?
EMFILE es el límite por proceso; ENFILE significa que la tabla de archivos de todo el sistema está llena.
¿Por qué aumentar ulimit no ayuda a mi servicio?
Los servicios iniciados por systemd ignoran el ulimit de tu shell. Define LimitNOFILE en el archivo de unidad.
Errores relacionados
Fuente: Linux kernel errno.h · soluciones redactadas y revisadas por los editores (consulta nuestra política editorial)
Última actualización: