EMFILE
error maximum files
significa que indica que el sistema operativo está negando su programa para abrir más descriptores de fichero.
Tenga en cuenta que los archivos abiertos en el sistema incluyen archivos de disco, canalizaciones con nombre, conectores de red y dispositivos abiertos por todos los procesos.
Su sistema operativo especifica el límite de archivo abierto por proceso.
Para verificar el límite de archivos abiertos de su sistema, use el comando ulimit -a
. Por lo general, en el sistema de tipo Unix está predeterminado en 1024.
Si la limitación fue 1024, significa que usted/proceso puede abrir un máximo de 1024 archivos. Si supera este límite, significa que open
, pipe
y dup
las llamadas al sistema fallarán y producirán el error EMFILE.
Cuando obtiene EMFILE
, en su mayoría indica la fuga en su código. Aumentar el ulimit a un valor más alto no es una buena solución en caso de que haya una fuga en su programa.
Debe intentar averiguar la causa de la fuga. Siguiendo se puede utilizar para depurar en UNIX como sistema operativo:
lsof
significa list open files
comando da la lista de archivos abiertos.Suponga que su programa nodeJS tiene una fuga, para averiguar el número total de descriptores de archivos abiertos por su programa:
lsof | nodo grep | wc -l
para averiguar los descriptores de fichero para tomas de corriente, uso:
lsof -i -n -P | grep nodo
El uso de este podemos descubrir dónde está la fuga y luego podemos corregirlo.
El error 'EMFILE' significa que el sistema operativo está negando su programa para abrir más archivos/sockets, eche un vistazo a: http://stackoverflow.com/q/34588/511300 – stewe
Gracias stewe! Cambiar ulimit lo resolvió. – codekick
¡De nada! Se agregó como una respuesta, por lo que puede [aceptar] (http://meta.stackexchange.com/a/5235/184785). – stewe