NodeJS: Wie Debuggen "EventEmitter Speicherleck erkannt. 11 Hörer hinzugefügt "
Wie kann ich meine debug-Anwendung, die diesen Fehler auslösen:
(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
at Socket.EventEmitter.addListener (events.js:160:15)
at Socket.Readable.on (_stream_readable.js:653:33)
at Socket.EventEmitter.once (events.js:179:8)
at TCP.onread (net.js:527:26)
Konnte ich nicht finden, die vermutete undichte Objekt für die Erhöhung listener Grenze von .setMaxListeners(0);
LÖSUNG (von fardjad und jan salawa)
Mit jan salawa sucht, fand ich eine funktionierende Bibliothek (longjohn) für die Erhöhung der stack-traces ausführlich. Mit fardjad die Antwort, die ich gefunden haben, haben wir einen Prototyp EventEmitter.addListener
UND EventEmitter.on
.
Mit der Lösung, die ich bekommen konnte, diese neue Spur:
(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
at EventEmitter.addListener.EventEmitter.on (xxx/main.js:44:15)
at Readable.on (_stream_readable.js:653:33)
at ServerResponse.assignSocket (http.js:1072:10)
at parser.onIncoming (http.js:1979:11)
at parserOnHeadersComplete (http.js:119:23)
at socket.ondata (http.js:1912:22)
at TCP.onread (net.js:510:27)
InformationsquelleAutor der Frage Ifnot | 2013-03-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es stellt sich heraus, dass dies ein bug in nodejs Kern, reden wir über dieses problem hier :
https://github.com/joyent/node/issues/5108
Lösung für verbuggt http-Server das ist, wirft einen
EventEmitter memory leak detected
und füllen Sie den verfügbaren Speicher /CPU-Zeit :Revert auf Vorgängerversion
v0.8.23
.Können Sie herunterladen und installieren/kompilieren von hier :
http://blog.nodejs.org/2013/04/08/node-v0-8-23-legacy/
InformationsquelleAutor der Antwort Ifnot
Für mich ist es sieht aus wie Ihre event-Schleife blockiert ist. Dies kann passieren, wenn Sie cpu-intensive Aufgaben in node.js Ereignis-Schleife. Sie können Kind-Prozess zu tun intensive Aufgabe.
Können Sie überprüfen, welche ist blockiert node.js mit folgenden Methoden:
InformationsquelleAutor der Antwort
Dies ist genau das, was mir passiert ist. Für mich, ich verschachtelten einen Ereignis-listener in einer anderen Ereignis-listener versehen.
Blick auf den code und stellen Sie sicher, dass Sie NICHT über einen Ereignis-listener-block INNERHALB eines anderen Ereignis-listener blockieren, zum Beispiel(es sei denn, Sie tun es auf Zweck):
In der falschen Beispiel über die Steckdose.auf ('schließen'), Hörer sollten AUßERHALB der Steckdose.auf('Daten'), block.
In meinem Fall erhielt ich 5 Datenströme, die Buchse.auf('schließen'), listener wartet auf ein close-Ereignis zu passieren. Wenn ich in der Nähe einmal, ein weiteres 4. closing-Ereignis ausgeführt werden würde. Dies ist eindeutig nicht das, was ich wollte. Dies ist aufgrund der Natur des Node.js die non-blocking. Es "merkt" Veranstaltungen wegen der callback-Funktion.
InformationsquelleAutor der Antwort fadleen
Haken
addListener
können Sie etwas wie das hier tun:InformationsquelleAutor der Antwort fardjad
Diese Warnung wird ausgelöst werden, wenn du dich für ein bestimmtes Ereignis ein und dasselbe Objekt mehr als 11 mal.
Überprüfen, ob Sie mit der " on " - rufen für ganz bestimmtes Ereignis in einer Funktion, die Sie aufrufen Häufig führt dies zu der Registrierung für eine Veranstaltung mehrere Male.
Diese link hat mir geholfen, dies zu verstehen.
InformationsquelleAutor der Antwort Vishwanath gowda k
Da Knoten 6, die Sie verwenden sollten
node --trace-warnings
: https://nodejs.org/api/cli.html#cli_trace_warningsInformationsquelleAutor der Antwort nicojs
Ich lief in das gleiche problem beim testen Reagieren Komponenten mit Mokka und Enzym.
War ich in der Lage mein problem zu lösen, indem Sie explizit unmounten Komponenten nachdem ich fertig war mit dem testen.
Das Problem war, dass ich Montage-Komponenten, die mehrere Male in meinen tests, die dann das hinzufügen von mehr Zuhörer, bis die Anzahl der Zuhörer kam auf 11, und ich habe eine Verwarnung bekommen.
Habe ich meinen test-code, indem die gerendert.unmount() Linie. Diese behoben das problem für mich.
InformationsquelleAutor der Antwort brendangibson