【发布时间】:2012-12-02 04:21:18
【问题描述】:
我注意到我的 node.js 应用程序的 RSS(驻留集大小)随着时间的推移而增长,并且考虑到我的服务器上出现“JS 对象分配失败 - 内存不足”错误,这似乎是可能的原因。
我设置了以下非常简单的 Node 应用程序:
var express = require('express');
var app = express();
app.get('/',function(req,res,next){
res.end(JSON.stringify(process.memoryUsage()));
});
app.listen(8888);
只需按住“刷新”热键@http://localhost:8888/,我就可以观看 RSS/heap/etc。增长,直到 RSS 超过 50mb(在我感到无聊之前)。等待几分钟然后回来,RSS 下降 - 推测 GC 已经运行。
我试图弄清楚这是否解释了我的实际节点应用程序崩溃的原因......我的生产应用程序很快达到了大约 100Mb 的 RSS 大小,当它崩溃时它通常在 200Mb-300Mb 之间。据我所知,这不应该太大(我相信节点应该能够处理 1.7Gb 左右),但我仍然担心我的生产服务器上的 RSS 大小呈上升趋势(衰减表示崩溃):
【问题讨论】:
-
据我所知,进程一直挂在内存上,直到操作系统在其他地方需要内存时换出未使用的页面——如果没有其他内容,你不会看到 RSS 自行关闭系统正在争夺内存。
-
也许您已经体验过infamous Walmart memory leak,现在已在
v0.10.22中修复。 -
对我来说,v8 中垃圾收集内存的这种行为似乎很正常