Как контролировать использование памяти узла.Джей?
Как я могу контролировать использование памяти узла.Джей?
5 ответов:
node-memwatch : обнаружение и поиск утечек памяти в узел.JS код. Проверьте этот учебник отслеживание утечек памяти в узле.js
встроенный процесс метод
memoryUsage
это дает представление об использовании памяти текущего узла.процесс Яш. Вот пример из узла v0. 12. 2 на 64-разрядной системе:$ 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 }
в этом простом примере вы можете видеть, что выделение массива из 10M элементов потребителей примерно 80MB (взгляните на
heapUsed
).
Если вы посмотрите на исходный код V8 (Array::New
,Heap::AllocateRawFixedArray
,FixedArray::SizeFor
), то вы увидите, что память, используемая массивом, является фиксированным значением плюс длина, умноженная на размер указателя. Последний составляет 8 байт на 64-битной системе, что подтверждает, что наблюдаемая разница в памяти 8 x 10 = 80 МБ имеет смысл.
кроме того, если вы хотите знать глобальную память, а не процесс узла':
var os = require('os'); os.freemem(); os.totalmem();
оригинал memwatch по сути мертв. Попробуй memwatch-next вместо этого, который, кажется, хорошо работает на современных версиях узел.