У меня есть около 220 файлов JSON, каждый размером около 6 МБ, которые мне нужно проанализировать и обработать. Итак, я делаю это в цикле. Вот как я читаю и обрабатываю это:
let fileList = fs.readdirSync('/500gb/json_files/gnip_30_p2');
fileList = fileList.reverse();
let totalErrors = 0;
let totalFiles = 0;
for (let file of fileList) { // TOTAL 220 FILES
// READ EACH JSON FILE OF ~6MB
let records = require(`/500gb/json_files/gnip_30_p2/${file}`);
let results = records.results;
if (results) {
for (let record of results) {
// .. Some Processing Work Here ..
}
}
}
Теперь проблема в том, что после запуска в течение примерно 3 минут я получаю JavaScript heap out of memory
ошибку:
[3661:0x28af890] 50503 ms: Mark-sweep 1310.9 (1467.4) -> 1310.7 (1470.9) MB, 612.9 / 0.0 ms allocation failure GC in old space requested
[3661:0x28af890] 51132 ms: Mark-sweep 1310.7 (1470.9) -> 1310.7 (1434.4) MB, 627.7 / 0.0 ms last resort GC in old space requested
[3661:0x28af890] 51759 ms: Mark-sweep 1310.7 (1434.4) -> 1310.7 (1429.4) MB, 626.4 / 0.0 ms last resort GC in old space requested
Нет рекурсивного вызова, только зацикливание, чтение и последующая отправка прочитанных данных после некоторых изменений в службу, которая быстро реагирует. Что может быть причиной того, что NodeJS исчерпал пространство кучи? Разве это не правильный способ чтения больших файлов JSON и их обработки?