【问题标题】:Node.js File Upload Memory LeakNode.js 文件上传内存泄漏
【发布时间】:2019-02-06 01:03:54
【问题描述】:

我正在使用 Node.js 和 Express 创建一个 API。当用户上传文件时,服务器会使用 sharp 图像处理库对其进行更改,然后将其上传到 Google Cloud Storage 存储桶。节点进程的 RAM 使用量随着上传文件的大小而增加,并且永远不会减少,即使在运行手动垃圾收集时也是如此。当没有剩余可分配的 RAM 时,服务器会崩溃。

这是问题的重现:

index.js

const express = require('express')
const GCS = require('@google-cloud/storage')
const Multer = require('multer')
const sharp = require('sharp')

const upload = Multer({ storage: Multer.MemoryStorage, })

const storage = new GCS({
    projectId: 'myProject',
    keyFilename: './key.json'
}).bucket('myBucket')


const app = express();

app.get("/", (req, res) => {
    res.sendFile(__dirname + '/index.html')
})

app.post("/upload", upload.single('media'), (req, res) => {
    console.log(req.file)
    sharp(req.file.buffer).rotate().resize(1920, 1920).toBuffer().then(b => {
        const fileUpload = storage.file('test/' + Date.now())

        const fileStream = fileUpload.createWriteStream({
            metadata: {
                contentType: req.file.mimetype
            },
            resumable: false
        });

        fileStream.on('error', (err) => {
            console.log(err)
            res.send("Server Error")
        });

        fileStream.on('finish', () => {
            fileUpload.makePublic().then(() => {
                res.send("DONE")
            })
        })
        fileStream.end(b)
    }).catch(e => {
        console.log(e)
        res.send("Server Error")
    })
})

app.listen(3000, () => {
    console.log("Server is running...")
})

index.html

<form action="/upload" enctype="multipart/form-data" method="POST">
    <input type="file" name="media">
    <input type="submit">
</form>

我还使用 Multer.DiskStorage 进行了测试,RAM 使用率保持一致,几乎没有增加太多。但是,由于磁盘存储、目录权限等原因,这种方法并不可取。

感谢您提供的任何帮助!

【问题讨论】:

    标签: express memory-leaks google-cloud-storage multer sharp


    【解决方案1】:

    我会查看之前的问题 herehere 中提供的建议 - 这可能不一定是内存泄漏的结果,增加实例类内存大小可以解决问题。

    【讨论】:

      猜你喜欢
      • 2012-03-11
      • 2016-01-01
      • 2020-01-25
      • 2014-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多