首页 > 解决方案 > NodeJS 堆外存储了什么

问题描述

我在 nodejs 环境中运行了很多“不太好”的 JavaScript 脚本。它包含内存泄漏、无限循环以及用户可以“常规”(非程序员)生成的任何代码。

我在随机分析这些“脚本”的执行时发现,其中一些具有巨大的rss内存区域,可以说大约1.0GBheapTotal可能“只是”大约450MB

尽管阅读了有关 nodejs 中内存布局的博客文章,但我无法解释/模拟这种“泄漏”。我试图创建堆转储,但显然我找不到存储在“堆栈区域”中的内容,因为我没有转储该区域。

有谁知道源代码中发生了什么,所以我们在堆大小小得多的情况下泄漏了所有内存,即“邪恶的源代码”看起来会从堆中吃掉空间吗?

编辑

我发现它非常简单:const c = Buffer.alloc(1024*1024*1024, 1)在堆外消耗 1GB。新的问题出现了:如何“清理”这个空间并释放内存?如何检测泄漏缓冲区?重启是唯一的方法吗?

标签: node.jsmemorymemory-managementmemory-leaksheap-memory

解决方案


推荐阅读