代码之家  ›  专栏  ›  技术社区  ›  HRK44

快速内存泄漏

  •  2
  • HRK44  · 技术社区  · 6 年前

    更多代码+信息: https://github.com/expressjs/express/issues/3817

    我有一个系统,从文件中解析一些数据,然后通过POST将其发送到expressapi。

    api.post('/data', async (req, res) => {
        let data = req.body.data;
    
        if (data) {
            log.info('Saving data : ' + data.filePath);
    
            let newData = await saveData(data);
            log.info('Finished saving data : ' + data.filePath);
            res.status(201).json(newData._id);
        }
        else
            res.status(400).end();
    });
    

    saveData函数:

    async function saveData(d) {
        let x = await OtherData.findOneAndUpdate(...);
        //some processing...
        return Data.findByIdAndUpdate(d._id, d, {new: true, upsert: true});
    }
    

    我试过使用chrome调试器,得到的结果是:

    enter image description here

    大小一直在快速增长,直到达到最大值,然后关闭服务器。而且,一旦我停止发送数据,它并不能立即释放内存,我需要等待几分钟。

    谢谢

    更新:

    • Mongo 4.0.4版
    • Express 4.16.4版

    我把 saveData api.post 功能,还是有同样的问题。

    现在代码如下:

    api.post('/data', async (req, res) => {
        let data = req.body.data;
    
        if (data) {
            log.info('Saving data : ' + data.filePath);
    
            let x = await OtherData.findOneAndUpdate(...);
            //some processing...
            let newData = await Data.findByIdAndUpdate(data._id, data, {new: true, upsert: true});
            log.info('Finished saving data : ' + data.filePath);
            res.status(201).json(newData._id);
        }
        else
            res.status(400).end();
    });
    

    我完全删除了与mongoose相关的代码-我只是接收数据并返回一个字符串'received',内存仍然在增长。

    可能与: https://github.com/expressjs/express/issues/3413

    0 回复  |  直到 6 年前