【发布时间】:2015-01-31 13:27:32
【问题描述】:
我对 Node + Express 在一项非常简单的任务中的表现感到非常惊讶。
我想做的只是通过多部分表单上传文件。 文件上传后,节点内存增加太多(巧合约60mb,与上传文件大小差不多)并一直保持到重新启动节点进程。我猜垃圾收集器应该释放分配的内存,但显然不是。一些信息:
- 节点 v:0.10.33
- Express v: 4.11.1
- 上传前节点 RAM = 19.9 MB
- 上传后节点 RAM = 79.9 MB
- 上传的文件大小:60 MB
为了解释它,我使用 Node 和 Express 从头开始创建了一个项目,使用
express -ejs .
我将这个示例项目上传到 GitHub(包括 node_modules)只是为了澄清一下,你有一个快照:https://github.com/CesarTrigo/node-express-memory-leak
如您所见,我创建了两条路线,一条用于表单,另一条用于打印请求内容。
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
router.post('/upload', function(req, res, next) {
console.log("/UPLOAD");
console.log(req);
res.end();
});
module.exports = router;
所以问题是,在 10 或 12 次大上传之后,Node 进程崩溃,因为 RAM 仍在增加并且内存不足。
我错过了什么?拜托,欢迎提供一点帮助!!! 非常感谢!
【问题讨论】:
-
您确定要提交多部分请求吗?您没有在 github 上的该项目中使用任何多部分请求处理中间件...
-
正确的@mscdex,在这个例子中甚至不需要处理多部分请求。接收这个简单的事实会增加记忆。
-
触发上传的速度有多快?我刚刚下载了您的示例,但无法使用 100mb 文件重现该问题。当然,我每 3-4 秒手动上传一次。
-
感谢您自己的回复。我只需上传一次即可重现该问题。您使用的是哪个节点版本?谢谢!
标签: node.js memory file-upload express memory-leaks