на узле не хватает памяти для обработки CSV-файлов

Я прочитал несколько SO вопросов о том, что nodejs не хватает памяти, но я не видел ничего похожего на мою ситуацию.

Я пытаюсь обработать около 20 ГБ данных в 250 CSV-файлах (около 80 МБ / файл). Запустите скрипт узла с помощью--max-old-space-size=8192 на сервере с 90 ГБ свободной памяти, используя узел v5.9.1. После 9 минут обработки скрипт завершает работу с ошибкой нехватки памяти.

Я новичок в программировании Node, но я подумал, что написал сценарий для обработки данных по одной строке за раз, а не для сохранения чего-либо в памяти. Тем не менее, кажется, что некоторые ссылки на объекты каким-то образом удерживаются, поэтому сценарий теряет память. Вот полный сценарий:

var fs = require('fs');
var readline = require('readline');
var mongoose = require('mongoose');

mongoose.connect('mongodb://buzzard/xtra');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));

var DeviceSchema = mongoose.Schema({
    _id: String,
    serial: String
});

var Device = mongoose.model('Device', DeviceSchema, 'devices');

function processLine(line) {
    var serial = line.split(',')[8];

    Device({
        _id: serial,
        serial: serial
    }).save(function (err) {
        if (err) return console.error(err);
    });
}

function processFile(baseDir, fileName) {
    if(!fileName.startsWith('qcx3'))
        return;

    var fullPath = `${baseDir}/${fileName}`;

    var lineReader = readline.createInterface({
      input: fs.createReadStream(fullPath)
    });

    lineReader.on('line', processLine);
}

function findFiles(rootDir) {
  fs.readdir(rootDir, function (error, files) {
    if (error) {
        console.log(`Error: ${error}` );
        return
    }

    files.forEach(function (file) {
        if(file.startsWith('.'))
            return;

        var fullPath = `${rootDir}/${file}`;

        fs.stat(fullPath, function(error, stat) {
            if (error) {
                console.log(`Error: ${error}` );
                return;
            }

            if(stat.isDirectory())
                dir(fullPath);
            else
                processFile(rootDir, file);
        });
    });
  })
}  


findFiles('c://temp/logs/compress');

Я также заметил, что когда я запускаю скрипт на гораздо меньшем тестовом наборе, который может полностью завершить обработку, скрипт не завершается в конце. Просто продолжаю висеть там, пока я не нажму ctrl + c. Может ли это быть как-то связано?

Что я делаю неправильно?

Ответы на вопрос(1)

Ваш ответ на вопрос