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
現在のneo4j.confで質問を更新しました。ヒープサイズはすでに2gです。あなたにはもっと多くのノードがあり、Neo4Jがうまく動作していることが分かります。このような小さなグラフを使用して私の設定で非常に多くのリソースを消費する理由は、私はまだ混乱しています。 – supercoco
JVMがOOM-killerによって強制終了されるか、内部JVMメモリを解放しなかった場合にJVMがクラッシュするかどうかについては言及していません。それは非常に重要です。また、dbms.memory.pagecache.sizeの設定は、デフォルトでRAMの半分に設定されています。 –
また、クエリを確認してください。私の知る限り、neo4jには長いクエリのタイムアウト設定がないので、3日後には同時に数百回も実行されている可能性があります。 –