Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Mein nodejs-Skript wird nach erfolgreicher Ausführung nicht von selbst beendet

Ich habe dieses Problem gerade durchgesehen.

Das Problem bei der einfachen Verwendung von process.exit() ist, dass das Programm, an dem ich arbeite, Handles erstellt, aber nie zerstört hat.

Es verarbeitete ein Verzeichnis und legte Daten in orientdb .

Einige der Dinge, die ich gelernt habe, sind, dass Datenbankverbindungen geschlossen werden müssen, bevor die Referenz entfernt wird. Und dieses process.exit() löst nicht alle Fälle.

Als mein Projekt 2.000 Dateien verarbeitete. Es wären noch etwa 500 übrig, und die zusätzlichen Handles hätten den verfügbaren Arbeitsspeicher aufgefüllt. Das bedeutet, dass es nicht weitergehen könnte. Daher nie den process.exit erreichen am Ende.

Wenn Sie andererseits die Elemente schließen, die die App auffordern, geöffnet zu bleiben, können Sie das Problem an seiner Quelle lösen.

Die beiden "undokumentierten Funktionen", die ich verwenden konnte, waren

process._getActiveHandles();
process._getActiveRequests();

Ich bin mir nicht sicher, welche anderen Funktionen beim Debuggen dieser Art von Problemen helfen, aber diese waren erstaunlich.

Sie geben ein Array zurück, und Sie können mit diesen Methoden eine Menge darüber bestimmen, was in Ihrem Prozess vor sich geht.

Ich hoffe nur, das hilft allen anderen, die über diesen Beitrag stolpern.