2016-09-27 4 views
0

Я пытаюсь загрузить большой файл GeoJSON в свою программу, но теперь я столкнулся с сбоем «из памяти» на моем dev-сервере (это не проблема на моем переносном устройстве), с ошибкой:Nodejs и загрузка большого файла GeoJSON для поиска?

Security context: 0x2a7393fcfb51 <JS Object> 
    1: parse [native json.js:62] [pc=0x25e952e638ef] (this=0x2a7393fc9111 <a JSON with map 0xb4bfd40a0e1>,C=0x3e8116304201 <Very long string[64906954]>,w=0x2a7393f04381 <undefined>) 
    2: arguments adaptor frame: 1->2 
    3: loadGeoJson [/home/myuser/myproject/node/geo-locations.js:26] [pc=0x25e952f451ff] (this=0x362211a62d19 <a GeoLocations with map 0x3e0b88b2b5b1>... 
FATAL ERROR: Committing semi space failed. Allocation failed - process out of memory 
1: node::Abort() [node] 
2: 0x10a08dc [node] 
3: v8::Utils::ReportApiFailure(char const*, char const*) [node] 
4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [node] 
5: v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [node] 
6: v8::internal::Heap::CollectGarbage(v8::internal::GarbageCollector, char const*, char const*, v8::GCCallbackFlags) [node] 
7: v8::internal::Factory::NewFixedArray(int, v8::internal::PretenureFlag) [node] 
8: v8::internal::JsonParser<false>::ParseJsonArray() [node] 
9: v8::internal::JsonParser<false>::ParseJsonValue() [node] 
10: v8::internal::JsonParser<false>::ParseJsonArray() [node] 
11: v8::internal::JsonParser<false>::ParseJsonValue() [node] 
12: v8::internal::JsonParser<false>::ParseJsonArray() [node] 
13: v8::internal::JsonParser<false>::ParseJsonValue() [node] 
14: v8::internal::JsonParser<false>::ParseJsonObject() [node] 
15: v8::internal::JsonParser<false>::ParseJsonValue() [node] 
16: v8::internal::JsonParser<false>::ParseJsonObject() [node] 
17: v8::internal::JsonParser<false>::ParseJsonValue() [node] 
18: v8::internal::JsonParser<false>::ParseJsonArray() [node] 
19: v8::internal::JsonParser<false>::ParseJsonValue() [node] 
20: v8::internal::JsonParser<false>::ParseJsonObject() [node] 
21: v8::internal::JsonParser<false>::ParseJsonValue() [node] 
22: v8::internal::JsonParser<false>::ParseJson() [node] 
23: v8::internal::JsonParser<false>::Parse(v8::internal::Handle<v8::internal::String>) [node] 
24: v8::internal::Runtime_ParseJson(int, v8::internal::Object**, v8::internal::Isolate*) [node] 
25: 0x25e9525092a7 
Aborted (core dumped) 

код вызывается, которые вызывают этот вопрос заключается в следующем:

JSON.parse(fs.readFileSync(filepath,"utf-8")) 

Я попытался разорвать линии на две части, но так как я сделал, что авария не произошло, что делает его трудно отлаживать. Тем временем, я хочу посмотреть, есть ли лучший способ справиться с попыткой загрузить файл GeoJSON, чтобы иметь возможность просматривать записи?

По существу, я делаю загрузку файла GeoJSON и поиск, чтобы найти, находится ли точка внутри многоугольника. Я рассмотрел просто бросать это в MongoDB, но я имею дело с содержимым файлов, которые являются полупрерывными.

Есть ли у кого-нибудь предложения?

ответ

0

Вы пытались увеличить максимальный предел памяти в узле? Значение по умолчанию - 512 МБ. Вы можете сделать что-то подобное, чтобы увеличить его до 1024 мб (или больше в зависимости от размера вашего geoJson).

узел --max-старо-пространство размера = 1024 script.js

комментарий, если это не исправить эту проблему, так как есть и другие решения также возможны.

+0

Кажется, что он делает эту работу, хотя мне будет интересно узнать, какие другие решения вы имели в виду. –

+0

Не был загружен весь файл в память. Вы можете использовать поток узлов для чтения в кусках файла в память, но это может быть не полезно в зависимости от того, как вы используете файл geoJSON. – user2263572