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.

也许您使用磁盘存储更好?它会慢一点但更可靠。