Hoe kan ik het geheugengebruik van Node.js controleren?
Antwoord 1, autoriteit 100%
De ingebouwde process-module heeft een methode memoryUsage
dat 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();
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.
Antwoord 7, autoriteit 2%
Op Linux/Unix (opmerking: Mac OS is een Unix) gebruik top
en 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.