2013-02-05 10 views
5

Secondo il mio monitoraggio dei server, il mio utilizzo della memoria è strisciante nel corso del tempo:Node.js perdita di memoria, nonostante costante Mucchio + RSS dimensioni

enter image description here

Dopo ~ 4 settimane di tempo di attività, esso finisce per causare problemi/crash (che ha senso, dato che sono su EC2 con istanze m1.large => 8 GB di RAM, e la RAM sembra aumentare a circa 1,5 GB/settimana).

Se si riavvia il node.js app, il ripristino utilizzo della memoria. Eppure ... che sto tenendo traccia del mio utilizzo della memoria tramite process.memoryUsage(), e anche dopo ~ 1 settimana, sto vedendo

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

Che cosa mi manca? Chiaramente la perdita è nel nodo, eppure il processo sembra non esserne a conoscenza ...

+0

State usando il modulo di cluster del nodo? Forse l'utilizzo della memoria segnalato appartiene a uno dei processi figli. Inoltre, hai verificato quale processo usa tutta la memoria usando ps/top? Quale versione di node.js stai usando? – samitny

+0

Impossibile rispondere senza codice effettivo. Ma si può provare https://nodetime.com/ per scavare per perdita di memoria. È possibile riavviare i cluster con dimensioni rss elevate. Qual è la soluzione molto sporca. – egiray

risposta

1

Si può provare il modulo node-memwatch, che aiuta con il rilevamento di perdite e heap diffing nel nodo.

Mucchio diff sarebbe simile a:

{ 
    "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 
     } 
    ] 
    }