【发布时间】:2015-04-05 02:56:55
【问题描述】:
我尝试了两个不同的库:multer 和 formidable 用于处理节点中的文件上传,并且它们在上传期间都使用 100% 的 CPU。
是常见的节点问题吗?以及在高并发环境下人们是如何处理的?
节点版本: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,但我认为它没有任何区别。
【问题讨论】:
-
你能发布一个代码示例吗?只是一个疯狂的猜测,也许这与github.com/felixge/node-formidable/issues/109有关?
-
我不认为这是相关的,因为我的问题是 CPU 而不是内存使用。无论如何,我添加了两个代码 sn-ps
-
你确定使用 100% 的 CPU 确实值得担心吗?例如,如果这是在您的测试机器上,而您的测试机器没有做任何其他事情,这可能就是应该发生的事情。一个更好的问题可能是:这会阻塞事件循环吗?你测试了吗?
-
请提供文件上传后发生的任何处理的详细信息,并可能在没有此后处理的情况下分析 CPU 负载。如果您已经这样做了,那么可能还值得进行基准测试,看看您是否真的有显着的性能损失。想到的其他事情是,由于管理程序限制,您可能会遇到问题。您是在虚拟机还是裸机中运行它?什么操作系统(和内核版本)。如果您使用的是 linux,您可以通过 mpstat 提供统计信息吗?
-
我刚刚在一个测试应用程序中测试了一个非常简单的文件上传,一个 11M 的电影似乎使 Amazon EC2 t2.micro 实例上的 CPU 从大约 3% 移动到大约 10%。不太科学或统计意义不大,但可能表明它可能值得像@tsturzi 建议的那样进行更多分析?我使用的是 express 和 Multer,但没有使用环回。此外,正如其他人所认为的那样,我认为建议的 CPU 使用需要仔细解释,因为大多数操作系统会管理负载以充分利用可用的 CPU(例如,当没有太多事情发生时,可能会运行低优先级的内务管理任务)。
标签: node.js formidable multer