EMFILE
significa error maximum files
che indica che il sistema operativo sta negando il vostro programma di aprire più descrittori di file.
Si noti che i file aperti nel sistema includono file su disco, named pipe, socket di rete e dispositivi aperti da tutti i processi.
Il sistema operativo specifica il limite di file aperti per processo.
Per controllare il limite di file aperti del sistema, utilizzare il comando ulimit -a
. Generalmente su unix come sistema è impostato su 1024.
Se la limitazione era 1024, significa che è possibile aprire un massimo di 1024 file. se superi questo limite significa open
, pipe
e dup
le chiamate di sistema non riusciranno e daranno errore EMFILE.
Quando si ottiene EMFILE
indica principalmente la perdita nel codice. Aumentare l'ulimit a un valore più alto non è una buona soluzione in caso di perdite nel programma.
Si dovrebbe cercare di scoprire la causa della perdita. In seguito può essere utilizzato per eseguire il debug in UNIX come sistema operativo:
lsof
significa list open files
comando dà la lista dei file aperti.Supponiamo che il tuo programma nodeJS stia avendo perdite per scoprire il numero totale di descrittori di file aperti dal tuo programma:
lsof | nodo grep | wc -l
per scoprire i descrittori di file per prese, uso:
lsof -i -n -P | grep nodo
Usando questo siamo in grado di scoprire dove la perdita è e allora possiamo correggerlo.
errore 'EMFILE' significa che il sistema operativo sta negando il programma per aprire più file/socket, dare un'occhiata a: http://stackoverflow.com/q/34588/511300 – stewe
Grazie stewe! Cambiando ulimit l'ha risolto. – codekick
Prego! È stato aggiunto come risposta, quindi puoi [accettare] (http://meta.stackexchange.com/a/5235/184785). – stewe