node.js - möglicher http-Server-Speicherverlust

8

Nodejs Version: 0.8.8

Hier ist der Server:

%Vor%

Client (PHP-Skript) lockt eine Postanforderung an den obigen Server. POST ist eine Zeichenfolge (JSON), etwa 4 MB groß.

Wie Sie sehen können, macht der Server nichts mit den geposteten Daten. Um zu debuggen, entfernte ich meinen ganzen Code und ging zurück zum Hallo Weltbeispiel, das nichts tut :)
Wenn ich mir die Speicherauslastung des Node-Prozesses (im Activity Monitor, Mac App) anschaue, wird gemeldet, dass die Speicherauslastung des Node-Servers für jede Anfrage größer wird.
Also nach 20 Anfragen oder so wird Speicherverbrauch verdoppelt.

    
ado 16.10.2012, 14:54
quelle

1 Antwort

19

Dies ist kein Fehler. Es ist normal, erwartetes Verhalten.

Node.js basiert auf JavaScript, einer von Müll gesammelten Sprache. Kurz gesagt, was passiert, ist, dass der Speicher nicht sofort freigegeben wird, sondern dass es eine gewisse Zeit dauern wird, bis der Speicher freigegeben ist (z. B. wird Müll gesammelt). V8 (welcher Knoten verwendet) hat tatsächlich einen sehr intelligenten Garbage Collector , der "eine schnelle Objektzuordnung gewährleistet, kurze Speicherbereinigungspausen und keine Speicherfragmentierung ".

Um dieses Verhalten für Sie zu demonstrieren, habe ich das obige Skript mit node.js 0.8.8 unter Windows ausgeführt und den Server mit großen HTTP-POST-Anfragen bombardiert.

Process Explorer zeigt das folgende Speicherauslastungsdiagramm an:

Wie Sie sehen können, steigt die Speicherbelegung bis zu einem bestimmten Grenzwert, der die Garbage Collection auslöst. Nach der Bereinigung wird die Nutzung zurückgesetzt und beginnt wieder bis zum nächsten Auslösen zu klettern.

    
jsalonen 16.10.2012, 14:59
quelle