【问题标题】:Multer, node.js : memory isn't purged after image upload and processMulter,node.js:图像上传和处理后内存不会被清除
【发布时间】:2016-02-16 19:32:24
【问题描述】:

我在 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(所以基本上只是发送文件而不进行处理),但问题仍然存在。

如果用户上传大量文件,恐怕会占用大量内存。

我可以做些什么来改进这段代码?

【问题讨论】:

    标签: node.js express multer


    【解决方案1】:

    这与多内存存储有关。您的图像存储在内存中。上传图片后,垃圾收集器应清除内存。但这可能不会立即变为现实。如果在很长一段时间后它在内存中可用,则可能存在内存泄漏,您应该在https://github.com/expressjs/multer/issues/ 中报告。

    在 multer 文档中还有:

    警告:上传非常大的文件,或者非常快速地大量上传相对较小的文件,可能会导致您的应用程序在使用内存存储时耗尽内存。

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

    【讨论】:

    • 我也有同样的问题,只是我没有使用内存。
    猜你喜欢
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 2016-06-08
    • 1970-01-01
    • 2021-12-14
    • 2017-05-22
    • 1970-01-01
    相关资源
    最近更新 更多