Что означают возвращаемые значения node.js process.memoryUsage()?

Из официальной документации (источник):

process.memoryUsage()

Возвращает объект, описывающий использование памяти процесса Nodeизмеряется в байтах.

var util = require('util');

console.log(util.inspect(process.memoryUsage()));

Это будет генерировать:

{ rss: 4935680, heapTotal: 1826816, heapUsed: 650472 }

heapTotal и heapUsed относятся к использованию памяти V8.

Точно, что означают rss, heapTotal и heapUsed?

Это может показаться тривиальным вопросом, но я искал, и до сих пор я не нашел четкого ответа.

Ответ 1

Чтобы ответить на этот вопрос, сначала нужно понять схему памяти V8s.

Запустимая программа всегда представляется через некоторое пространство, выделенное в памяти. Это пространство называется Resident Set. V8 использует схему, аналогичную виртуальной машине Java, и делит память на сегменты:

  • Код: фактический выполняемый код
  • Stack: содержит все типы значений (примитивы, такие как integer или Boolean) с указателями, ссылающимися на объекты в куче и указателях, определяющие поток управления программой
  • Куча: сегмент памяти, предназначенный для хранения ссылочных типов, таких как объекты, строки и блокировки. введите описание изображения здесь

Теперь легко ответить на вопрос:

  • rss: размер резидентного набора
  • heapTotal: общий размер кучи
  • heapUsed: используется куча

Ссылка: http://apmblog.dynatrace.com/2015/11/04/understanding-garbage-collection-and-hunting-memory-leaks-in-node-js/

Ответ 2

RSS - это размер резидентного набора, часть памяти процесса, хранящаяся в ОЗУ (в отличие от пространства подкачки или части, хранящейся в файловая система).

Куча - это часть памяти, из которой будут вызываться вновь выделенные объекты (подумайте о malloc в C или new в JavaScript).

Вы можете узнать больше о куче Wikipedia.