2013-02-11 4 views
6

Ich habe ein Skript für Node.Js geschrieben, das eine Menge Daten sammelt, verarbeitet, speichert und dann beendet. Unglücklicherweise verhindert etwas, was ich getan habe, dass das Skript beendet und der Knoten geschlossen wird, stattdessen bleibt es offen.Debug-Knoten, was hält es am Laufen?

Ich werde wahrscheinlich nur durch die Änderungen arbeiten, die ich gemacht habe und versuche, es aufzuspüren, aber ... Gibt es eine einfache Möglichkeit, Knoten zu debuggen und herauszufinden, welche Code/Ereignis/Callback/Verbindung oder was auch immer, auf das es wartet?

Ich habe mir den Knoten-Inspektor angeschaut, aber ich konnte nicht herausfinden, wie man alles aufspürt, was es offen hält. Irgendein Rat?

+0

Erschienen als ein Modul für Flaschen, die nicht richtig schließen. Markieren Sie dies nicht als beantwortet, da es immer noch nützlich wäre, einen Weg zu finden, um herauszufinden, auf welchen Knoten gewartet wird. –

Antwort

5

Sie können Ihr Programm node.js mit wtfnode ausführen oder require('wtfnode').init(); in der ersten Zeile oder in Ihrem Programm hinzufügen. Es wird dann die Liste aller Dinge gedruckt, die den Knoten offen halten, wenn Sie ctrl + c drücken, um den Prozess zu beenden.

3

Wenn ich das passiert habe, ist es meistens so etwas wie mongodb, amqp usw. Das sind Datenbankverbindungen, Netzwerkverbindungen. Stellen Sie sicher, dass Sie diese schließen, sobald Sie mit der Verarbeitung fertig sind.

Ich denke, man lsof -p <PID> verwenden könnte und sehen, was das sagt. Ich kann dort sowohl mongodb als auch amqp sehen.

0

An dem Punkt, wo Sie es erwarten hinzufügen zu schließen

console.log(process._getActiveHandles()); 

Sie können auch einen Handler hinzufügen

process.on('SIGINT',() => console.log(process._getActiveHandles())); 

Also, wenn Knoten schließen nicht richtig, Strg + C wird Ihnen sagen, warum.

+0

BTW diese Antwort hinzufügen, weil Wftnode für mich nicht funktionierte, da es verhindert, dass die Exit-Handler ausgeführt werden. Kudos zu Myndzi für die Technik. Ich würde wtfnode empfehlen, wenn Sie keine Exit-Handler haben. – teknopaul

Verwandte Themen