read stream 造成内存增长?
发布于 6 年前 作者 joey3060 1602 次浏览 来自 问答

目前专案需求是 从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

回到顶部