Detect node.js / Javascript Speicherleck im Code

8

Ich habe einen Code , der funktioniert, aber er enthält ein Speicherleck.

Was sind einige gute Strategien zum Verfolgen von Speicherlecks in node.js?

Welche Schritte sollte ich bei der Suche nach solchen Lecks befolgen?

Wie kann ich das Leck in meinem Code verfolgen?

Danke

    
BenoitD 30.03.2013, 21:11
quelle

1 Antwort

17

Sie können dies herausfinden, indem Sie die Speichernutzung Ihrer Anwendung grafisch darstellen.

Javascript-Objekte werden auf dem Heap zugewiesen. Daher benötigen Sie ein Tool, das den Heapspeicher auslagern kann. Nachdem Sie einen Heapspeicherauszug angefordert haben, können Sie ihn überprüfen und sehen, wie viele Instanzen eines bestimmten Objekts (oder einer bestimmten Funktion) existieren.

ZB für Ihren Code wissen Sie, dass Sie immer dann einen Socket erstellen, wenn ein Benutzer eine Verbindung herstellt. Wenn Sie den Heapspeicher ablegen, während drei Benutzer verbunden sind, sollten ~ 3 Sockets angezeigt werden. Wenn der Heapspeicher nach dem Trennen dieser Benutzer getrennt wird, sollten ~ 0 Sockets angezeigt werden.

Sie können den Heap-Dump-Analysator von Chrome auch mit Node.js-Heap-Dumps verwenden.

  • Dokumentation zum Chrome-Heap-Dump-Analysator: Ссылка

    >
  • Projekt, mit dem Sie Node.js-Heap-Dumps aufnehmen und in Chrome überprüfen können: Ссылка

Nur fyi, Funktionen werden im Heap-Dump im Abschnitt (closure) angezeigt.

Sie sollten sicherstellen, dass Sie Ihre Funktionen benennen (auch wenn sie keinen Namen benötigen), damit sie im Heap-Dump als nützlich angezeigt werden.

Zum Beispiel etwas wie

function() { }

wird nur als function() im Heap-Dump angezeigt. Wo wie:

function taggedFunction() { }

wird als function taggedFunction() im Heap-Dump angezeigt. Wenn Sie 100 getaggedFunctions erstellen, sehen Sie taggeFunction 100 Mal im Heapspeicher. Wenn Sie Ihre Funktionen benennen, können Sie herausfinden, ob Sie sie weiterhin erstellen und weitergeben.

    
Matt Crinklaw-Vogt 30.03.2013 21:23
quelle