2013-02-05 17 views
5

Według mojego monitoringu serwera, moje zużycie pamięci jest pnący się w czasie:wyciek pamięci node.js, mimo stałej Heap + RSS rozmiarach

enter image description here

Po ~ 4 tygodnie uptime, kończy się przyczyną problemy/awarie (co ma sens, biorąc pod uwagę, że jestem w EC2 z instancjami m1.large => 8 GB RAM, a RAM wydaje się zwiększać o około 1,5 GB/tydzień).

Po ponownym uruchomieniu aplikacji node.js użycie pamięci zostanie zresetowane. jednak ... Jestem śledzenie mojego zużycia pamięci przez process.memoryUsage(), a nawet po ~ 1 tydzień, widzę

{"rss":"693 Mb","heapTotal":"120 Mb","heapUsed":"79 Mb"} 

Czego mi brakuje? Najwyraźniej wyciek jest w węźle, ale proces wydaje się nie być tego świadomy ...

+0

Czy używasz modułu węzła klastra? Być może zgłoszone użycie pamięci należy do jednego z procesów podrzędnych. Czy sprawdziłeś, który proces używa całej pamięci za pomocą ps/top? Którą wersję pliku node.js używasz? – samitny

+0

Nie można odebrać bez rzeczywistego kodu. Ale możesz spróbować https://nodetime.com/ wykopać pod kątem wycieku pamięci. Możesz ponownie uruchomić klastry o wysokim rozmiarze rss. To bardzo brudne rozwiązanie. – egiray

Odpowiedz

1

Możesz wypróbować moduł node-memwatch, który pomaga w wykrywaniu nieszczelności i dyfuzji w węźle.

Heap diff będzie wyglądać podobnie do:

{ 
    "before": { "nodes": 11625, "size_bytes": 1869904, "size": "1.78 mb" }, 
    "after": { "nodes": 21435, "size_bytes": 2119136, "size": "2.02 mb" }, 
    "change": { "size_bytes": 249232, "size": "243.39 kb", "freed_nodes": 197, 
    "allocated_nodes": 10007, 
    "details": [ 
     { "what": "String", 
     "size_bytes": -2120, "size": "-2.07 kb", "+": 3, "-": 62 
     }, 
     { "what": "Array", 
     "size_bytes": 66687, "size": "65.13 kb", "+": 4, "-": 78 
     }, 
     { "what": "LeakingClass", 
     "size_bytes": 239952, "size": "234.33 kb", "+": 9998, "-": 0 
     } 
    ] 
    }