我已经在 8GB 和 4 核的 Ubuntu 16.04 虚拟机 (Hyper-V) 中安装了 Neo4J v3.3.0(社区版)。
我有一个非常小的图表(30 个节点),它仅用于读取(大约每 3 秒点击 1 次),它很少被写入。我们想进一步扩展图表,但每三天(有时更少)我们的服务器就会崩溃,因为 Java 占用了超过 2GB 的内存,而顶部显示了 300% 的 CPU 使用率。
对我来说这根本没有意义,你能否让我知道如何配置 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();
在我退出应用程序之前,连接仍然保持打开状态。
最后的评论
我的代码中有一个地方我没有关闭连接。