Hoe het geheugengebruik van Node.js te controleren?

Hoe kan ik het geheugengebruik van Node.js controleren?


Antwoord 1, autoriteit 100%

De ingebouwde process-module heeft een methode memoryUsagedat inzicht biedt in het geheugengebruik van het huidige Node.js-proces. Hier is een voorbeeld uit Node v0.12.2 op een 64-bits systeem:

$ node --expose-gc
> process.memoryUsage();  // Initial usage
{ rss: 19853312, heapTotal: 9751808, heapUsed: 4535648 }
> gc();                   // Force a GC for the baseline.
undefined
> process.memoryUsage();  // Baseline memory usage.
{ rss: 22269952, heapTotal: 11803648, heapUsed: 4530208 }
> var a = new Array(1e7); // Allocate memory for 10m items in an array
undefined
> process.memoryUsage();  // Memory after allocating so many items
{ rss: 102535168, heapTotal: 91823104, heapUsed: 85246576 }
> a = null;               // Allow the array to be garbage-collected
null
> gc();                   // Force GC (requires node --expose-gc)
undefined
> process.memoryUsage();  // Memory usage after GC
{ rss: 23293952, heapTotal: 11803648, heapUsed: 4528072 }
> process.memoryUsage();  // Memory usage after idling
{ rss: 23293952, heapTotal: 11803648, heapUsed: 4753376 }

In dit eenvoudige voorbeeld ziet u dat het toewijzen van een array van 10 miljoen elementen ongeveer 80 MB verbruikt (kijk eens naar heapUsed).
Als je de broncode van V8 bekijkt (Array::New, Heap::AllocateRawFixedArray, FixedArray::SizeFor), dan zul je zien dat het geheugen dat door een array wordt gebruikt een vaste waarde is plus de lengte vermenigvuldigd met de grootte van een aanwijzer. De laatste is 8 bytes op een 64-bits systeem, wat bevestigt dat het waargenomen geheugenverschil van 8 x 10 = 80 MB logisch is.


Antwoord 2, autoriteit 37%

node-memwatch: geheugenlekken in Node.JS-code detecteren en vinden.
Bekijk deze tutorial Tracking Down Geheugenlekken in Node.js


Antwoord 3, autoriteit 25%

Ook als u globaal geheugen wilt weten in plaats van knooppuntproces’:

var os = require('os');
os.freemem();
os.totalmem();

Zie documentatie


Antwoord 4, autoriteit 17%

De originele memwatchis in wezen dood. Probeer in plaats daarvan memwatch-next, dat goed lijkt te werken op moderne versies van Node.


Antwoord 5, autoriteit 6%

Je kunt node.js memoryUsage

gebruiken

const formatMemoryUsage = (data) => `${Math.round(data / 1024 / 1024 * 100) / 100} MB`
const memoryData = process.memoryUsage()
const memoryUsage = {
                rss: `${formatMemoryUsage(memoryData.rss)} -> Resident Set Size - total memory allocated for the process execution`,
                heapTotal: `${formatMemoryUsage(memoryData.heapTotal)} -> total size of the allocated heap`,
                heapUsed: `${formatMemoryUsage(memoryData.heapUsed)} -> actual memory used during the execution`,
                external: `${formatMemoryUsage(memoryData.external)} -> V8 external memory`,
}
console.log(memoryUsage)
/*
{
    "rss": "177.54 MB -> Resident Set Size - total memory allocated for the process execution",
    "heapTotal": "102.3 MB -> total size of the allocated heap",
    "heapUsed": "94.3 MB -> actual memory used during the execution",
    "external": "3.03 MB -> V8 external memory"
}
*/

Antwoord 6, autoriteit 3%

Als u het express.js-framework gebruikt, kunt u express-status gebruiken -monitor. Het is zeer eenvoudig te integreren en biedt CPU-gebruik, geheugengebruik, responstijd enz. in grafisch formaat.

voer hier de afbeeldingsbeschrijving in


Antwoord 7, autoriteit 2%

Op Linux/Unix (opmerking: Mac OS is een Unix) gebruik topen druk op M (Shift+M) om processen te sorteren door geheugengebruik.

Gebruik in Windows Taakbeheer.


Antwoord 8

node memwatch en memwatch daarna worden deze niet ondersteund op nodejs 14.17.0 versie.
alleen ondersteuning voor een nieuwe node-memwatch-nieuwe module.
Vertel me alsjeblieft hoe ik node-memwatch install op nodejs 14.17 versie moet installeren.

Other episodes