2017-11-20 3 views
1

8GBと4コアのUbuntu 16.04仮想マシン(Hyper-V)にNeo4J v3.3.0(コミュニティエディション)をインストールしました。小さなグラフのNeo4Jは、Ubuntuで多くのメモリを使用しています。16.04

私は非常に小さなグラフ(30ノード)を持っており、それは読み込み専用です(3秒ごとに約1ヒット)。それはめったに書き込まれません。グラフをさらに拡大したいが、Javaが2GBを超え、トップが300%のCPU使用率を示したため、サーバーがクラッシュするのは3日ごと(ときどき少ない)です。

これは私には全く意味がありません、これを防ぐためにJavaまたはNeo4Jを設定する方法を教えてください。

おかげ

私は私の/etc/neo4j/neo4j.confファイルに次の設定があります。

dbms.query_cache_size=5000 
dbms.threads.worker_count=4 
dbms.memory.heap.initial_size=2g 
dbms.memory.heap.max_size=2g 

dbms.memory.pagecache.size=2g 

この問題が発生したときのログファイルは、次のエラーが表示さ:

ERROR [o.n.b.v.r.c.RunnableBoltWorker] Worker for session 'ecfe4a7f-1714-4ba3-9e98-a692bf153b45' crashed. Java heap space java.lang.OutOfMemoryError: Java heap space 

これらの不審なメッセージもありますが(たくさんあります):

WARN [o.n.k.i.c.MonitorGc] GC Monitor: Application threads blocked for 4680ms. 

ERROR [o.n.b.v.t.BoltMessagingProtocolV1Handler] Failed to write response to driver Unable to write to the closed output channel org.neo4j.bolt.v1.packstream.PackOutputClosedException: Unable to write to the closed output channel 

WARN [io.netty.channel.DefaultChannelPipeline] An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception. syscall:read(..) failed: Connection reset by peer 

新しい情報

私がやった:

netstat -an | grep ESTABLISHED 

私はオープン接続がたくさんありました。私たちはnodeJS(https://github.com/neo4j/neo4j-javascript-driver)に次のjavascriptドライバを使用しています。接続が正しくチェックされていないかどうかを確認します。

私がきちんと正しくすべての接続をクローズしていそうです:私は、アプリケーションを終了するまでの接続がまだ開いたまま

session.close(); 
driver.close(); 

最終コメント

私は接続を閉じていなかった私のコードでの場所がありました。

https://github.com/neo4j/neo4j-javascript-driver/issues/275

答えて

2

私はのNeo4jは特別なチューニングなしで10mlnノードと30mln関係とRAM 8GBの上で私のために正常に動作することを、言うことができます。

topは、おそらくガベージコレクションが行われたときにCPU使用率が300%を示します。だから私は、インデックスの不在を意味ヒープサイズより大きなデータベースの高いCPUの消費に

/etc/neo4j/neo4j.conf 

パラメータ

dbms.memory.heap.max_size=3g 

を増やすに投票します。1を作成するために

CALL db.indexes(); 

CREATE INDEX ON :Label(prop_name); 

あなたは(dmesgを参照)OOMエラーを取得し、JavaはLinuxの(ないクラッシュ)によって殺された場合は、サーバーをインストールしようとするインデックスを一覧表示するには

OSは、CentOS(GUIなし)のように、いくつかのメモリを解放します。 8GBのサイズのデータ​​ベースを持つNeo4jの場合、8GB以上で十分です。

+0

現在のneo4j.confで質問を更新しました。ヒープサイズはすでに2gです。あなたにはもっと多くのノードがあり、Neo4Jがうまく動作していることが分かります。このような小さなグラフを使用して私の設定で非常に多くのリソースを消費する理由は、私はまだ混乱しています。 – supercoco

+0

JVMがOOM-killerによって強制終了されるか、内部JVMメモリを解放しなかった場合にJVMがクラッシュするかどうかについては言及していません。それは非常に重要です。また、dbms.memory.pagecache.sizeの設定は、デフォルトでRAMの半分に設定されています。 –

+0

また、クエリを確認してください。私の知る限り、neo4jには長いクエリのタイムアウト設定がないので、3日後には同時に数百回も実行されている可能性があります。 –

関連する問題