我们正在使用Neo 2.0.1并且遇到了一些问题。跑了几个小时后(看似没有问题),Neo变得反应迟钝。它似乎允许传入请求,但根本没有响应,导致这些连接数量增加。快速查看最后两个事件中的两个jstack转储似乎表明大多数线程在尝试创建事务时都被阻塞。第一次崩溃后,我们认为我们的sendmail队列存档问题可能存在问题。我们清空了队列并释放了相关的空间,但这似乎并没有解决问题(问题再次以看似相同的方式出现)。通过Visual VM观察事物似乎显示正常行为,直到突然CPU和内存似乎变平并且服务器变得无响应。有没有其他人使用Neo4J处理类似的事情以及您采取了哪些步骤来解决?任何帮助表示赞赏。感谢。
修改
以下是来自线程的顶部几个堆栈帧,它们似乎是主要块:
"qtp1947705168-6665" prio=10 tid=0x0000000018a37000 nid=0x368b waiting for monitor entry [0x0000000046b84000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.neo4j.kernel.impl.nioneo.store.PersistenceWindowPool.expandBricks(PersistenceWindowPool.java:595)
- waiting to lock <0x00000005990ccbb0> (a org.neo4j.kernel.impl.nioneo.store.PersistenceWindowPool)
at org.neo4j.kernel.impl.nioneo.store.PersistenceWindowPool.acquire(PersistenceWindowPool.java:144)
at org.neo4j.kernel.impl.nioneo.store.CommonAbstractStore.acquireWindow(CommonAbstractStore.java:431)
at org.neo4j.kernel.impl.nioneo.store.NodeStore.updateRecord(NodeStore.java:189)
at org.neo4j.kernel.impl.nioneo.xa.Command$NodeCommand.execute(Command.java:397)
at org.neo4j.kernel.impl.nioneo.xa.NeoStoreTransaction.executeCreated(NeoStoreTransaction.java:995)
at org.neo4j.kernel.impl.nioneo.xa.NeoStoreTransaction.applyCommit(NeoStoreTransaction.java:804)
at org.neo4j.kernel.impl.nioneo.xa.NeoStoreTransaction.doCommit(NeoStoreTransaction.java:752)
at org.neo4j.kernel.impl.transaction.xaframework.XaTransaction.commit(XaTransaction.java:327)
at org.neo4j.kernel.impl.transaction.xaframework.XaResourceManager.commitWriteTx(XaResourceManager.java:579)
at org.neo4j.kernel.impl.transaction.xaframework.XaResourceManager.commit(XaResourceManager.java:490)
- locked <0x000000059e3b05a8> (a org.neo4j.kernel.impl.transaction.xaframework.XaResourceManager)
at org.neo4j.kernel.impl.transaction.xaframework.XaResourceHelpImpl.commit(XaResourceHelpImpl.java:64)
XaResourceManager上的锁是阻止createTransaction上所有其他线程的。 PersistenceWindowPool上的锁只会挂起几个小时,直到我们重新启动Neo。由于存在基于引用计数的锁定,我们无法轻易看到哪些特定锁将expandBricks保持在其循环中。
修改
堆配置
wrapper.java.initmemory=10240
wrapper.java.maxmemory=10240
一些额外的内存配置
wrapper.java.additional=-Xmn900m
wrapper.java.additional=-XX:SurvivorRatio=1
wrapper.java.additional=-XX:PermSize=512m
MMIO配置
neostore.nodestore.db.mapped_memory=384M
neostore.propertystore.db.mapped_memory=9336M
neostore.propertystore.db.strings.mapped_memory=10360M
neostore.propertystore.db.arrays.mapped_memory=16M
neostore.relationshipstore.db.mapped_memory=3840M