Multer,node.js:图像上传和处理后不会清除内存
Multer, node.js : memory isn't purged after image upload and process
我在 Node.js 中使用 Sharp 和 Multer,但我遇到了一些内存问题。使用此代码完成该过程后,似乎不会释放使用的缓冲区:
var storage = multer.memoryStorage(),
upload = multer({
storage: storage
}).single('picture');
router.post('/save', function (req, res) {
upload(req, res, function (err) {
sharp(req.file.buffer)
.resize(400, 400)
.max()
.toFormat('jpeg')
.toFile("public/images/picture.jpg", function (err) {
res.send(true);
});
});
});
每次发送图片时,使用的内存都会随着图片的大小而增加,并且永远不会被清除。
我试过不使用 Sharp(所以基本上只是发送一个文件而不进行后续处理),但问题仍然存在。
如果用户上传大量文件,恐怕会占用大量内存。
我可以做些什么来改进这段代码?
这与多内存存储有关。您的图像存储在内存中。上传图像后,垃圾收集器应清除内存。但这可能不会立即成为。如果它在很长一段时间后在内存中可用,则可能存在内存泄漏,您应该在 https://github.com/expressjs/multer/issues/ 中报告。
此外,在 multer 文档中还有:
WARNING: Uploading very large files, or relatively small files in large numbers very quickly, can cause your application to run out of memory when memory storage is used.
也许您使用磁盘存储更好?它会慢一点但更可靠。
我在 Node.js 中使用 Sharp 和 Multer,但我遇到了一些内存问题。使用此代码完成该过程后,似乎不会释放使用的缓冲区:
var storage = multer.memoryStorage(),
upload = multer({
storage: storage
}).single('picture');
router.post('/save', function (req, res) {
upload(req, res, function (err) {
sharp(req.file.buffer)
.resize(400, 400)
.max()
.toFormat('jpeg')
.toFile("public/images/picture.jpg", function (err) {
res.send(true);
});
});
});
每次发送图片时,使用的内存都会随着图片的大小而增加,并且永远不会被清除。
我试过不使用 Sharp(所以基本上只是发送一个文件而不进行后续处理),但问题仍然存在。
如果用户上传大量文件,恐怕会占用大量内存。
我可以做些什么来改进这段代码?
这与多内存存储有关。您的图像存储在内存中。上传图像后,垃圾收集器应清除内存。但这可能不会立即成为。如果它在很长一段时间后在内存中可用,则可能存在内存泄漏,您应该在 https://github.com/expressjs/multer/issues/ 中报告。
此外,在 multer 文档中还有:
WARNING: Uploading very large files, or relatively small files in large numbers very quickly, can cause your application to run out of memory when memory storage is used.
也许您使用磁盘存储更好?它会慢一点但更可靠。