NodeJS上传文件100%cpu使用率

时间:2015-02-05 09:51:52

标签: node.js formidable multer

我尝试了两个不同的库:multerformidable来处理节点中的文件上传,并且它们在上传过程中都使用100%的CPU。

这是常见的节点问题吗?人们如何在高并发环境中处理它?<​​/ p>

节点版本:v0.10.36(我甚至尝试过其他版本,例如 v0.11.x v0.10.33

强大的示例

Picture.upload = function(user, req, cb) {
    var formidable = require('formidable')

    var form = new formidable.IncomingForm();
    form.uploadDir = "./uploads";
    form.maxFieldsSize = app.settings.uploadMaxSize * 1024 * 1024;
    form.maxFields = 1000;

    form.parse(req, function(err, fields, files) {
        cb(null, files);
    });
}

Multer示例

app.use(multer({ dest: './uploads/',
    rename: function (fieldname, filename) {
       return filename+Date.now();
    },
    limits: {
       files: 1,
       fileSize: app.settings.uploadMaxSize * 1024 * 1024
    }
})); // after I process the file from req.files

文件上传为multipart/form-data

我使用的是loopback,但我认为它没有任何区别。

1 个答案:

答案 0 :(得分:-1)

在高并发环境中,如果某个任务使cpu达到100%,那么节点将block。我假设上传文件意味着与提供静态资产相同。关于nodejs如何不适合提供静态内容,有很多讨论here。请改用nginx或apache。

另一种解决方案是将上载委托给工作进程或排队系统。例如,请参阅ZMQ