Проблема со статистикой потребления памяти NodeJS - Огромное использование RSS и внешней памяти - PullRequest
0 голосов
/ 24 сентября 2019

Работая над тестированием производительности для Node Project, я столкнулся с некоторыми отчетами о памяти, которые немного сбивают с толку с точки зрения производительности и утечек памяти.

Фон

Итак, я сгенерировалотчеты, использующие process.memoryUsage () API, который предоставляет информацию о следующих -

  • RSS - подмножестве общей выделенной памяти, включая кучу, кодсегмент и стек
  • heapTotal - память, выделенная для объектов, строк и замыканий
  • heapUsed - фактическая память, используемая объектами, строками,и замыкания
  • external - использование памяти объектами C ++, привязанными к объектам JavaScript, управляемым V8

Проблема

Я записалснимок памяти после каждого запроса к серверу и построения графика для 100 запросов -

image

The graph shows following information -

  1. The RSS memory keeps increasing with every request served
  2. The External Memory usage is significant compared to Heap Memory
  3. The External Memory goes down once the process is idle
  4. The Total Heap & Used Heap memories are well under control

Findings

As per my understanding, something outside Heap is causing the memory to rise.

I am using sharp node package which is resizing a lot of large images which ends up generating huge in memory buffers for those images.

In terms of memory, every request is serving 10 images that ends up generating 80 MB of buffer data

This is where I came across эта проблема github , где обсуждается влияние создания буферов в NodeJ

этот ответ в той же проблеме github объясняет, как буферы могут занимать память, которую garbage collector не может отслеживать


Вопросы

Я на правильном пути?

Если нет, использование буферов в Node Applications не является правильным способом?

...