node.js - 使用 Node 流时内存不足

标签 node.js memory-leaks elasticsearch stream

我正在尝试索引一个大文件(1 500 000 行)并将其推送到 Elasticsearch 。为此,我正在使用 Node js 流;但是,我的内存一直不足。我做错了什么?

var rl = null;

initialize(function() {
  var stream =  fs.createReadStream(process.argv[2]);
  rl = readline.createInterface({input: stream, terminal: false});
  var i = 0;

  rl.on('line', function(line) {
    rl.pause();
    processObject(++i, extractObject(line));
  });

  rl.on('close', function() {
    console.log('\nRefreshed index;');
    process.exit();
  });
});

function processObject(number, input) {
    client.index({
            index: INDEX,
            type: TYPE,
            id: number,
            body: input
    }, function (error, response) {
        rl.resume();
        if(number % 1000 == 0) process.stdout.write('.');
    });
};

最佳答案

好的,这就是解决方案。我写的代码很好;问题出在“readline”包上。事实上,rl.pause() 函数并没有像它应该的那样暂停行读取。我通过切换到以相同方式工作的“逐行”包解决了这个问题。使用相同的代码,该进程运行在 60 MB 以内。

关于node.js - 使用 Node 流时内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29292528/

相关文章:

php - 在 Elasticsearch 格式错误的查询中按日期范围搜索

javascript - 如何计算网页上的唯一访问者

javascript - HTTP JSON API SERVER 中的这段代码在 learnyounode 中起到了什么作用

javascript - 非常大的 Promise 所有数组显示从 Lambda 调用的周期性故障

c - 在 C 中从字符串转换为整数时出现内存泄漏(?)

iphone - UINavigationController 泄漏/理解 popViewController

json - 使用 Express.js 动态更改 JSON 间距

javascript - 使用 d3 转换会导致内存泄漏

java - 在 SpringBoot 中使用 Testcontainers 进行 Spring Data Elasticsearch 集成测试

elasticsearch - Elasticsearch:某些字段立即显示,有些则延迟