Memoria
In questo documento puoi imparare come eseguire il debug di problemi relativi alla memoria.
Il mio processo esaurisce la memoria
Node.js (JavaScript) è un linguaggio con garbage collection, quindi è possibile avere perdite di memoria tramite i retainer. Poiché le applicazioni Node.js sono solitamente multi-tenant, business critical e a lunga durata, fornire un modo accessibile ed efficiente per trovare una perdita di memoria è essenziale.
Sintomi
L'utente osserva un utilizzo della memoria in continuo aumento (può essere veloce o lento, nell'arco di giorni o addirittura settimane) quindi vede il processo bloccarsi e riavviarsi dal gestore del processo. Il processo potrebbe essere più lento di prima e i riavvii causano il fallimento di alcune richieste (il bilanciatore del carico risponde con 502).
Effetti collaterali
- Riavvii del processo a causa dell'esaurimento della memoria e le richieste vengono perse
- L'aumento dell'attività del GC porta a un maggiore utilizzo della CPU e tempi di risposta più lenti
- Il GC blocca l'Event Loop causando rallentamenti
- L'aumento dello swapping di memoria rallenta il processo (attività del GC)
- Potrebbe non esserci abbastanza memoria disponibile per ottenere uno Heap Snapshot
Il mio processo utilizza la memoria in modo inefficiente
Sintomi
L'applicazione utilizza una quantità inattesa di memoria e/o osserviamo un'attività elevata del garbage collector.
Effetti collaterali
- Un numero elevato di errori di pagina
- Maggiore attività del GC e utilizzo della CPU