jsdom und node.js undichter Speicher

8

Ich habe ein paar Hinweise auf Leute mit einem ähnlichen Problem gefunden, bei denen die Antwort immer war: Stellen Sie sicher, dass Sie window.close () aufrufen, wenn Sie fertig sind. Aber das scheint für mich nicht zu funktionieren (Knoten 0.8.14 und jsdom 0.3.1)

Eine einfache Repro

%Vor%

Ausgabe, die ich bekomme, ist

%Vor%

An diesem Punkt geht der Lüfter aus und der Test stoppt tatsächlich ... oder zumindest beginnt er sehr langsam zu gehen

Hat jemand andere Tipps als window.close, um den Speicherverlust loszuwerden (oder es sieht sicher wie ein Speicherleck aus)

Danke!

Peter

    
Peter 15.12.2012, 14:43
quelle

4 Antworten

9

Verwenden von jsdom 0.6.0, um einige Daten zu scrapen und lief auf das gleiche Problem.
window.close half nur, den Speicherverlust zu verlangsamen, aber es schlich schließlich herauf, bis der Prozess getötet wurde.

Ausführen des Skripts mit node --expose-gc myscript.js

Bis sie den Speicherverlust beheben, scheint der Aufruf des Garbage Collectors zusätzlich zum Aufruf von window.close zu funktionieren:

%Vor%

Stuck das nach dem Aufruf von window.close. Die Speicherverwendung fällt bei jedem Auslösen sofort auf die Grundlinie zurück (ca. 50 MB für mich). Kaum wahrnehmbarer Halt.

    
CheapSteaks 25.05.2013 06:49
quelle
3

Ich hatte das gleiche Problem mit jsdom und switcht zu cheerio , das ist viel schneller als jsdom und funktioniert auch nach dem Scannen von Hunderten von Websites. Vielleicht solltest du es auch versuchen. Das einzige Problem ist, dass es alle Selektoren enthält, die Sie in jsdom verwenden können.

hoffe, es funktioniert auch für Sie.

Daniel

    
BeMoreDifferent.com 16.12.2012 13:46
quelle
2

Sie geben dem Programm keine Leerlaufzeit für die Garbage Collection. Ich glaube, dass Sie mit dem gleichen Problem mit jedem großen Objekt-Graphen konfrontiert werden, der viele Male in einer Schleife ohne Unterbrechungen erzeugt wird.

Dies wird durch die Antwort von CheapSteaks bestätigt, die die Garbage Collection manuell erzwingt. Es kann keinen Speicherverlust in jsdom geben, wenn das funktioniert, da Speicherlecks per Definition verhindern, dass der Garbage Collector den ausgelaufenen Speicher sammelt.

    
Domenic 10.09.2013 12:51
quelle
1

mit Schluck, Speichernutzung, Bereinigung, Variable löschen, window.close ()

%Vor%

und ich hatte konstant zwischen 200mb - 300mb Nutzung, für 7k Dateien. es dauerte 30 Minuten. Es könnte für jemanden hilfreich sein, da ich gegoogelt habe und nichts hilfreich gefunden habe.

    
Hontoni 16.12.2014 23:38
quelle

Tags und Links