EMFILE
bedeutet error maximum files
was darauf hindeutet, dass das Betriebssystem das Programm verweigert mehr Dateideskriptoren zu öffnen.
Beachten Sie, dass geöffnete Dateien im System Disk-Dateien, Named Pipes, Netzwerk-Sockets und von allen Prozessen geöffnete Geräte enthalten.
Ihr Betriebssystem gibt den Grenzwert für geöffnete Dateien pro Prozess an.
Um das Limit für offene Dateien Ihres Systems zu prüfen, verwenden Sie den Befehl ulimit -a
. Im Allgemeinen auf Unix-artiges System ist es standardmäßig 1024.
Wenn die Einschränkung war 1024, bedeutet, dass Sie/Prozess kann maximal 1024 Dateien öffnen. Wenn Sie diesen Grenzwert überschreiten, bedeutet dies, dass open
, pipe
und dup
Systemaufrufe fehlschlagen und EMFILE-Fehler verursachen.
Wenn Sie EMFILE
erhalten, zeigt es meistens das Leck in Ihrem Code an. Das Erhöhen des ulimit auf einen höheren Wert ist keine gute Lösung für den Fall, dass ein Leck in Ihrem Programm vorhanden ist.
Sie sollten versuchen, die Ursache für ein Leck zu finden. Im Anschluss kann in Unix verwendet werden, wie Betriebssystem zu debuggen:
lsof
Bedeutung list open files
Befehl gibt eine Liste der geöffneten Dateien.Gehen Sie davon aus, dass Ihr nodeJS-Programm undicht ist, um die Gesamtzahl der von Ihrem Programm geöffneten Dateideskriptoren zu ermitteln:
lsof | grep Knoten | wc -l
Um die Datei-Deskriptoren für Steckdosen herausfinden, zu verwenden:
lsof -n -i -P | grep Knoten
diese verwenden wir herausfinden können, wo das Leck ist und dann können wir es korrigieren.
"EMFILE" Fehler bedeutet, dass das Betriebssystem Ihr Programm zu öffnen, weitere Dateien/Sockets zu verweigern, sehen Sie sich an: http://StackOverflow.com/q/34588/511300 – stewe
Vielen Dank Stewe! Das Ändern von ulimit hat es gelöst. – codekick
Gern geschehen! Habe es als Antwort hinzugefügt, damit du es akzeptieren kannst (http://meta.stackexchange.com/a/5235/184785). – stewe