更多代码+信息,位于:https://github.com/expressjs/express/issues/3817
我有一个系统,可以分析文件中的某些数据,然后通过POST将其发送到Express API。
数据大小小于1Mb。
我每秒向我的api发送大约7个请求(每秒解析7个文件),这是API代码:
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});
}
如果我用日志检查api的输出,那一瞬间我就能看到这两行。另外,一旦我停止发送数据,就不再看到日志输出,因此没有延迟或请求堆积,它肯定可以处理7个请求/秒(我认为)。
我尝试了chrome调试器,这就是我得到的:
大小一直保持快速增长,直到达到最大值,然后关闭服务器。此外,一旦我停止发送数据,它就不会立即释放内存,我需要等待几分钟。
如果您对正在发生的事情有任何想法,或者对如何更有效地进行跟踪有任何建议,那就太好了。
谢谢
更新:
修改
我剥离了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();
});
更新2
我完全删除了与猫鼬相关的代码-实际上,我只是在接收数据并返回一个“已接收”字符串,但内存仍然会增加。
有关