Tecnología · GUÍA PRÁCTICA
EMFILE en Node.js: identifica quién controla el límite antes de subir ulimit
Conserva el proceso que falla, su límite heredado y el crecimiento de descriptores; separa techo bajo, fuga, pico de concurrencia y presión de vigilancia.

EMFILE es un problema de propiedad antes que de ajuste. Un shell, un servicio systemd y un proceso reiniciado pueden tener pruebas distintas; conserva el PID antes de reiniciar.
Fija el proceso antes de reiniciar
Registra comando o servicio exacto, lanzador padre, PID, hora y primera línea EMFILE. No empieces reiniciando o reinstalando dependencias: borran la tabla y ocultan si el conteo era estable, creciente o un pico.
Lee el límite que realmente heredó
En Linux lee Max open files en /proc/PID/limits y compáralo con ulimit -Sn y -Hn del shell interactivo. Un hijo hereda límites del padre; cambiar el shell después de que systemd arrancó el servicio no cambia ese servicio.
Mide descriptores vivos y crecimiento
Cuenta /proc/PID/fd varias veces y agrupa destinos en archivos, sockets, tuberías y descriptores anónimos. Un conteo estable junto al techo apoya la rama de límite; crecimiento continuo, fuga; un pico con trabajo paralelo, concurrencia.
Separa presión de vigilancia de archivos normales
Una pila que termina en fs.watch o FSEvent marca la superficie de vigilancia, no una solución universal. Compara alcance vigilado, directorios ignorados y descriptores; en Linux distingue además la contabilidad separada de inotify.
Cambia una vez al propietario correcto
Si el servicio heredó un límite blando demasiado bajo, cámbialo en su lanzador o unidad y reinicia ese servicio. Si el conteo no baja, cierra la fuga; si el pico viene de trabajo paralelo, limita concurrencia. No llames reparación a cambiar otro shell.
Prueba el cierre con el lanzador original
Repite la misma carga desde el mismo shell, supervisor, CI o unidad. Guarda límite del nuevo PID, máximo y base posterior. Terminar significa que EMFILE desaparece y el conteo vuelve a un estado estable explicado, no solo que un reinicio pasó una vez.
