【发布时间】:2020-01-03 02:31:10
【问题描述】:
我有一个在服务器上运行的用 nodejs 编写的应用程序。我注意到(通过不时手动检查服务器负载)我的应用程序从大约 50MB 的总分配 RAM 开始(其中大约 10 MB 是 HEAP)但 6 天后它总共使用了 100 MB(尽管HEAP 或多或少保持不变)。
首先,我尝试使用 Chrome 对其进行调试,但调试器仅监控已分配 RAM 的 HEAP 部分(我没有注意到那里有任何问题)。另一方面,我在有限的时间内观察了调试器。
所以,为了进一步监控 RAM 使用情况,我在我的应用程序中编写了以下代码
var maxRecordedRam = 0;
ramCheck = setInterval(() => {
let ram = process.memoryUsage();
let ramRss = Math.round(ram.rss / 1024 / 1024 * 100) / 100;
let ramHeap = Math.round(ram.heapUsed / 1024 / 1024 * 100) / 100;
if ( maxRecordedRam < ramRss ) {
// memory load is higher then the last recorded value
maxRecordedRam = ramRss;
modulUtile.log(
"RAM: " + ramRss + " MB (Heap: " + ramHeap + " MB)",
"INFO"
);
}
}, 30000);
请注意modulUtile.log() 方法是console.log 的一种包装器,用于将消息记录到文件中。
6 天后,我在日志文件中有以下输出(文件较大,我只选择了一些值):
[2019-08-23 07:10:19] RAM: 44.27 MB (Heap: 10.03 MB)
.....
[2019-08-23 07:25:19] RAM: 56.81 MB (Heap: 11.57 MB)
.....
[2019-08-23 09:13:19] RAM: 65.85 MB (Heap: 15.72 MB)
.....
[2019-08-23 14:47:49] RAM: 90.97 MB (Heap: 19.14 MB)
.....
[2019-08-25 09:49:52] RAM: 93.9 MB (Heap: 10.66 MB)
.....
[2019-08-29 12:39:30] RAM: 97.02 MB (Heap: 17.23 MB)
HEAP 分配在工作时间最多为 20MB,在夜间和早上(当应用处于空闲状态时)约为 10MB。但是,虽然 HEAP 上下波动,但总 RAM 只是在上升。
我的问题:是否有可能在HEAP区域之外发生内存泄漏(因为据我所知,只有HEAP区域用于存储变量)?
【问题讨论】:
标签: node.js debugging memory-leaks