Stavo eseguendo il mio server con pm2 start ...
e pm2 monit
mi mostrava 3GB memory
dopo 2 ore. Così ho attaccato memwatch, ora ho aspettato per altre 2 ore e ancora una volta la memoria mostrata da pm2 monit
ha raggiunto 3GB
.Perdita di memoria Node.JS con PM2
Quindi, ho controllato i registri memwatch generato.
{ before: { nodes: 75659, size_bytes: 11141702, size: '10.63 mb' },
after: { nodes: 73226, size_bytes: 10840598, size: '10.34 mb' },
change:
{ size_bytes: -301104,
size: '-294.05 kb',
freed_nodes: 5141,
allocated_nodes: 2708,
E un altro:: mi ha mostrato
{ before: { nodes: 72591, size_bytes: 10728318, size: '10.23 mb' },
after: { nodes: 73284, size_bytes: 10798062, size: '10.3 mb' },
change:
{ size_bytes: 69744,
size: '68.11 kb',
freed_nodes: 5931,
allocated_nodes: 6620,
ora sono davvero confuso, questi sono gli ultimi ceppi quindi sono abbastanza sicuro che quelli sono i log generati quando pm2 monit
ha mostrato l'enorme perdita di memoria.
Quindi, perché memwatch
mi mostra 10MB+
memoria e pm2 monit che mostra 3GB+
?
Ora passare a qualcosa di simile a forever
o monit per vedere se la perdita esiste ancora.
Un po 'più di fondo
- ho cercato al profilo e trovare la perdita e non c'è solo qualsiasi mostra perdite sui profili.
- Il memwatch diff viene avviato quando un client si connette e la differenza viene eseguita quando il client si disconnette.
Informazioni su questo, stavo cercando di profilare il profilo per gli ultimi 2 giorni e non riesco a trovare il problema. Così alla fine ho deciso di trasferirmi in Golang, che è sorprendente, con enormi differenze di memoria e prestazioni. Molto efficiente. Finalmente nessuna falla confusa. Inoltre è piuttosto semplice da codificare, ricodificato in JavaScript per meno di un giorno. – majidarif