Я установил узел на сервере ubuntu и пытаюсь запустить базовую программу узла с сервера. В нем я пытаюсь читать в 13 файлах json, начиная от 120mb - 500+ mb. Раньше я запускал его локально, что было нормально для файлов меньшего размера, но при попытке прочитать более крупные ошибки выполнялась следующая ошибка:
FATAL ERROR: CALL_AND_RETRY_0 Allocation failed - process out of memory
Мне нужно иметь возможность анализировать через json-объект после прочтения файла, поэтому я не могу его прочесть по строкам. И мне нужно иметь возможность построить кумулятивный объект из результатов анализа всех объектов. Как я уже сказал, код работает очень хорошо и дает результат, который я ожидаю при работе с меньшими файлами 3+ (<20 Мб), но с ошибками с большими.
Когда вы пытаетесь запустить его на сервере, у меня такая же проблема (он будет работать отлично с меньшими файлами), но с ошибкой на более крупных ошибках:
# Fatal error in ../deps/v8/src/handles.h, line 48
# CHECK(location_ != NULL) failed
#
==== C stack trace ===============================
1: V8_Fatal
2: v8::String::NewFromUtf8(v8::Isolate*, char const*, v8::String::NewStringType, int)
3: node::StringBytes::Encode(v8::Isolate*, char const*, unsigned long, node::encoding)
4: node::Buffer::Utf8Slice(v8::FunctionCallbackInfo<v8::Value> const&)
5: v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&))
6: ??
7: ??
[1] 12381
Неверная аппаратная инструкция (core dumped) node main2.js
Это код, который он не выполняет:
for (var i = 0; i < jsonFileArray.length; i++) {
if (jsonFileArray[i].match(/\.json$/)) {
jsonObject = JSON.parse(fs.readFileSync(dirPath + jsonFileArray[i]));
categoryListObject = jsonManipulator.getFieldValues("Categories", jsonObject, categoryListObject);
}
}
Я попытался увеличить размер моего -max-old-space, но это не помогло. Кроме того, я должен пояснить, что я довольно новичок в кодировании и никогда не писал ничего на C, поэтому, несмотря на то, что я это делаю, я не уверен, куда идти дальше. Так что действительно, любая помощь/руководство/проницательность/шаг в правильном направлении были бы оценены супер! Благодарю!
Вы разбираете весь огромный файл JSON в память, чтобы этого можно было ожидать. Попробуйте использовать что-то вроде этого модуля: https://github.com/dominictarr/JSONStream и прочитайте файлы с потоком чтения (http://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options).