我在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);
});
});
});
每次发送图片时,使用的内存都会增加图片的大小,并且永远不会被清除。
我试过没有使用夏普(所以基本上只是发送一个文件而不进行处理)但问题仍然存在。
如果用户上传了大量文件,恐怕会占用大量的内存。
我可以做些什么来改进这段代码?
答案 0 :(得分:1)
这与multer内存存储有关。您的图像存储在内存中。上传图像后,应通过垃圾收集器清除内存。但这可能不会立即成为现实。如果在大量时间后内存中可用,则可能存在内存泄漏,您应该在https://github.com/expressjs/multer/issues/中报告。
另外,在multer文档中有:
警告:非常快速地上传非常大的文件或大量相对较小的文件会导致应用程序在使用内存存储时耗尽内存。
使用磁盘存储可能更好吗?它会慢一点但更可靠。