Итак, я наконец-то наткнулся на решение своей проблемы (я использую «спотыкаться», потому что я не уверен, что это определенно правильная стратегия, но она работает для меня).
Я обнаружил, что на самом делеувеличение значения --max_old_space_size
мне не очень помогло.В любом случае, как я уже упоминал выше, мой MacBook имеет только 8 ГБ, поэтому у меня все равно низкий лимит.Наоборот, что помогло, так это просто уменьшить размер моей партии.Таким образом, вместо обработки 10K XML, хранения их данных в памяти, а затем вставки их в транзакцию в SQLite, я обрабатывал 1K XML за раз.Конечно, для обработки ~ 250К файлов мне пришлось иметь дело с 250 циклами вместо 25 циклов, но это не слишком увеличивало мое время.Я обнаружил, что время обработки довольно линейное, около 5K мс на 1K файлов (или 50K мс на 10K файлов).SQLite работает довольно быстро, независимо от того, добавляю я 1K или 10K INSERT в транзакцию, но это мой процесс парсера XML, который начинает работать при работе с очень большими объемами данных.На самом деле, это может также не быть проблемой с cheerio
(что, я считаю, очень хорошо).Это может быть мой стиль кодирования, который может быть значительно улучшен.
В любом случае, обработка транзакций 1K с --max_old_space_size=2048
сделала свою работу для меня.Использование памяти узлом (как показано в Activity Monitor было довольно стабильным, и весь дамп файлов 250 КБ был проанализирован и загружен в БД примерно за 42 минуты. Я могу с этим смириться.