Memoria heap node.js e dimensione heap utilizzata [pm2]
Attualmente sto eseguendo node.js utilizzando pm2.
E recentemente sono stato in grado di controllare le "metriche personalizzate" utilizzando il comando pm2 monit.
Qui vengono mostrate informazioni come la dimensione dell'heap, la dimensione dell'heap utilizzato e le richieste attive.
Non so come viene determinata la dimensione dell'heap. In realtà, ho controllato pm2 in esecuzione su server diversi.
Ciascuno era impostato su 95mib / 55mib e, di conseguenza, la dimensione dell'heap utilizzata era diversa.
Inoltre, l'utilizzo dell'heap è più vicino al 100%, meglio è?
Durante la ricerca su "StackOverflow" per trovare informazioni correlate, ho visto il seguente articolo.
Cosa significa Heap Usage in PM2
Inoltre cosa significa richieste attive? È continuamente zero.
Grazie!
[Modificare]
env: ubuntu18.04 [ec2 - t3.micro]
versione del nodo: v10.15
[Additional]
memoria del server: 1 GB [40 ~ 50% utilizzato]
cpu: vCPU (2) [1 ~ 2% utilizzato]
Risposte
L'heap è la RAM utilizzata dal programma che stai chiedendo a PM2 di gestire e monitorare. Lo spazio dell'heap, in Javascript e in altri linguaggi simili, viene allocato quando il programma crea oggetti e viene rilasciato dopo la garbage collection. Il runtime richiede più spazio heap al sistema operativo ogni volta che ne ha bisogno: quando le allocazioni attive superano lo spazio libero. Quindi la dimensione dell'heap aumenterà probabilmente all'avvio del programma. È normale.
La maggior parte dei programmi alloca e rilascia molti oggetti mentre svolgono il loro lavoro, quindi non dovresti cercare di ottimizzare la percentuale di utilizzo del tuo heap. Quando il tuo programma è in esecuzione in uno stato stabile, cioè dopo che è stato avviato, troverai la percentuale di utilizzo che aumenta fino a quando non avviene la raccolta dei rifiuti, quindi si interrompe. Ad esempio, un server web nodejs / express alloca reqe resoggetti per ogni richiesta in arrivo, quindi li utilizza, quindi li rilascia in modo che il garbage collector possa recuperare la RAM.
Se la dimensione dell'heap allocato continua a crescere, nel giro di pochi minuti o ore, probabilmente hai una perdita di memoria. Questo è un bug di programmazione: un problema che dovresti fare del tuo meglio per risolvere. Dovresti cercare come funziona per la lingua della tua applicazione. Oltre a questo, non preoccuparti troppo dell'utilizzo dell'heap.
Le richieste attive contano il lavoro svolto tramite vari oggetti asincroni come i file writer e le connessioni TCP. A meno che il tuo programma non sia molto occupato, rimane vicino allo zero.
Tieni d'occhio il ritardo del ciclo se il tuo programma esegue calcoli. Se si insinua, alcune funzioni di calcolo stanno monopolizzando Javascript.