NodeJS 内存消耗统计问题 - 巨大的 RSS 和外部内存使用量

pla*_*ter 7 buffer garbage-collection memory-leaks node.js sharp

在为 Node 项目进行性能测试时,我遇到了一些内存报告,这些报告在性能和内存泄漏方面的解释有点令人困惑。

背景

因此,我使用process.memoryUsage() API生成了报告,该 API 提供了有关以下信息的信息 -

  • RSS - 总分配内存的子集,包括堆、代码段和堆栈
  • heapTotal - 分配给对象、字符串和闭包的内存
  • heapUsed - 对象、字符串和闭包使用的实际内存
  • external - 绑定到 V8 管理的 JavaScript 对象的 C++ 对象的内存使用

问题

我在每次向服务器发出请求后记录了内存快照,并绘制了 100 个请求的图表 -

图表显示以下信息 -

  1. RSS内存随着服务的每个请求而不断增加
  2. External Memory相比用法是显著Heap Memory
  3. External Memory一旦进程空闲,它就会关闭
  4. Total HeapUsed Heap受到控制的记忆是很好

发现

根据我的理解,Heap 之外的某些东西导致内存上升。

我正在使用sharp node package它调整大量大图像的大小,最终为这些图像生成巨大的内存缓冲区。

在内存方面,每个请求都提供 10 张图像,最终生成 80 MB 的缓冲区数据

这是我遇到这个 github 问题的地方,讨论了在 NodeJs 中创建缓冲区的影响

这个答案在同一个 github 问题中,解释了缓冲区如何可能占用garbage collector无法跟踪的内存


问题

我在正确的轨道上吗?

如果没有,在节点应用程序中使用缓冲区不是正确的方法吗?