2016-09-27 17 views
0

大きなGeoJSONファイルを自分のプログラムに読み込もうとしていますが、dev_server(携帯用の問題ではありませんでした)で 'メモリ不足'が発生しました。失敗は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) 

次のようにこの問題がある引き起こすと呼ばれているコード:私は2つの行を破壊しようとしているが、私はクラッシュが発生していないことを行っていることから、にそれは難しい作っ

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

デバッグ。その間、GeoJSONファイルをロードしようとするより良い方法があるかどうかを見たいと思います。

私がやっていることは、GeoJSONファイルを読み込んで、ポイントがポリゴン内にあるかどうかを調べることです。私はこれをMongoDBに投げ込むことを考えましたが、私は半一時的なファイルの内容を扱っています。

誰にも提案はありますか?

答えて

0

ノードの最大メモリ制限を増やしてみましたか?デフォルトは512MBです。これを1024 mb(またはgeoJsonのサイズに応じてそれ以上)に増やすために何かをすることができます。同様に可能で、他の解決策があるので、これは、問題が解決しない場合は

ノード--max-古い空間サイズ= 1024 script.jsは

コメント。

+0

私はあなたが念頭に置いていた他の解決策について興味がありますが、それは仕事をしているようです。 –

+0

ファイル全体をメモリに読み込まない方法もありました。ノードストリームを使用してファイルの塊をメモリに読み込むことはできますが、geoJSONファイルの使用方法によってはこれが役に立たないことがあります。 – user2263572

関連する問題