node.js - NodeJS 堆外存储了什么
问题描述
我在 nodejs 环境中运行了很多“不太好”的 JavaScript 脚本。它包含内存泄漏、无限循环以及用户可以“常规”(非程序员)生成的任何代码。
我在随机分析这些“脚本”的执行时发现,其中一些具有巨大的rss
内存区域,可以说大约1.0GB而heapTotal
可能“只是”大约450MB。
尽管阅读了有关 nodejs 中内存布局的博客文章,但我无法解释/模拟这种“泄漏”。我试图创建堆转储,但显然我找不到存储在“堆栈区域”中的内容,因为我没有转储该区域。
有谁知道源代码中发生了什么,所以我们在堆大小小得多的情况下泄漏了所有内存,即“邪恶的源代码”看起来会从堆中吃掉空间吗?
编辑:
我发现它非常简单:const c = Buffer.alloc(1024*1024*1024, 1)
在堆外消耗 1GB。新的问题出现了:如何“清理”这个空间并释放内存?如何检测泄漏缓冲区?重启是唯一的方法吗?
解决方案
推荐阅读
- c# - 是否可以更改数组中变量的值?
- c - 字符输入上的 Scanf 特定错误条件
- yii2 - 提交表单后出现两次成功消息
- java - 如何在 FXML/JavafX 中创建购物车项目?
- c# - 连接到本地 xml 文件并从结果中创建按钮
- batch-file - 完成任务后如何退出.bat文件并终止任务
- angular - 在 Angular 6 中封装 ng2-table
- docker - 如何连接到在 docker + supervisord 下运行的 python pdb 调试器?
- thorntail - 无法使用 thorntail 连接到 activemq 资源适配器
- python - 一个 PYTHON 程序,它从一个数字文件中获取输入并计算平均值