【问题标题】:NodeJS + Express Memory leak on multipart upload分段上传时的 NodeJS + Express 内存泄漏
【发布时间】: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


【解决方案1】:

我猜是图片的console.log() 的问题。在网上我发现其他人提到 console.log() was leaking memory.

尝试执行其他操作,例如将其保存到文件中,看看这是否会导致您现在遇到的主要内存泄漏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多