NodeJS / ExpressJS 内存泄漏

6

I've a static ExpressJS Server like that:

var express = require("express"),
    app = express();

app.use(express.static(__dirname));

app.listen(1050);

当我启动服务器时,它使用了20MB的v8堆。如果我每秒钟重新加载页面,则使用的堆会不断增长。4小时后,v8堆使用量达到40MB。总v8堆达到80MB,RSS(进程使用的总内存)达到130MB。
为什么这个简单的静态服务器使用了这么多内存?看起来像是内存泄漏。如果我不停止页面重新加载,则使用的内存将继续增长。
如果一个简单的静态服务器使用太多内存,那么做更大的项目就不可能了。
NodeJS版本:v0.10.21 ExpressJS版本:3.3.5
编辑:我注意到这是NodeJS的问题,因为我尝试了node-static而不是express,虽然使用/总V8堆保持不变,但nodejs使用的RSS内存继续增长。
屏幕截图:
https://www.dropbox.com/s/4j5qs3rv2549dix/Screenshot%202014-03-20%2014.06.57.png https://www.dropbox.com/s/0c30ou8l3rv2081/Screenshot%202014-03-20%2014.07.54.png https://www.dropbox.com/s/5be1isk4v70qj8g/Screenshot%202014-03-20%2014.08.10.png
(从13:48开始)

你是如何执行查询的?你会关闭它们吗? - Denys Séguret
“查询”是什么意思?这是一个静态网站,服务器只发送静态HTML文件,我们没有SQL服务器。注意:我使用Debian操作系统。 - angelocala94
不,我正在使用一个Chrome插件,它每秒刷新页面。 - angelocala94
如果使用的内存更多,它有可能被垃圾回收。你可以进行一个更重的测试来确认。 - Farid Nouri Neshat
@Phoenix 如果这样的错误存在,除非它与某个非常精确的Express版本有关,否则它会被注意到。 - Denys Séguret
显示剩余4条评论
2个回答

3

如果您仍需要答案,我将为任何可能遇到相同问题的人发布答案。

我曾经遇到过完全相同的问题,并通过使用以下方法解决:

--max-old-space-size 5

这限制了GC删除前所保留的内存量。

1
为了帮助NodeJS和Express的开发者,可以尝试使用内存快照(使用Chrome DevTools完成,使用URL chrome://inspect),这将允许您查看内存分配的位置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接