read stream 造成内存增长?
目前专案需求是 从csv档 汇入资料 并写到 资料库 大略的代码如下
const csv = require('fast-csv');
const fs = require('fs-extra');
const stream = fs.createReadStream(path.resolve('example.csv'))
.pipe(csv.parse({ headers: true }))
.transform((row) => {
// 做一些资料的processing
return {
// 略.....
};
})
.on('readable', () => {
let row;
while (null !== (row = stream.read())) {
// 将资料塞入资料库的操作
}
}
})
.on('end', () => {
Promise.all(allPromises).then(() => {
console.log('---------- BULK IMPORT SUCCESS ----------');
console.log(`---------- Imported ${allPromises.length} cards ----------`);
console.log('memory increased by', Math.round((process.memoryUsage().rss - before) / 1024 / 1024), 'MB');
process.exit();
}).catch((err) => {
throw err;
})
});
在本地端跑都没事,但放到公司的dev server上 就出了问题,错误是进程直接被Killed 使用free -m发现目前server上 memory 只剩下2xx MB
查了许多资料,不知道上述代码哪里会造成记忆体的问题,毕竟我没有设read size 应该不会造成缓冲区过大 不知道是哪个观念没打通 帮帮我…
另外 我知道V8的内存在32 bit下 约0.7G 64bitˋ是 1.4G 如果linux 整体的能使用的记忆体 只剩2xx MB 那分配给V8的记忆体量是?
1 回复
内存泄露的话,可以做一个 Heapsnapshot,然后分析下看看 可以了解下 https://node.console.aliyun.com