Skip to content

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