我们正在以嵌入模式运行Neo4j的v1.9.1(最新稳定版)。我们遇到过一些情况,即进程意外关闭并且没有调用neo4j.shutdown()。 注意:发生这种情况时,我们知道neoDB没有发生未完成的更新或更改。这也是在Linux操作系统上。
当应用程序再次启动并启动与neo4j的连接时,它开始恢复过程但是永远挂起。 messages.log文件显示:
2013-07-17 21:05:09.143+0000 INFO [o.n.k.i.t.x.XaLogicalLog]: XaResourceManager[nioneo_logical.log] recovery completed.
2013-07-17 21:05:09.143+0000 INFO [o.n.k.i.t.x.XaLogicalLog]: Recovery on log [/opt/pricing/data/database/app/nioneo_logical.log.1] completed.
2013-07-17 21:05:09.156+0000 INFO [o.n.k.i.t.TxManager]: TM opening log: /opt/pricing/data/database/app/tm_tx_log.2
2013-07-17 21:05:09.245+0000 INFO [o.n.b.BackupServer]: BackupServer communication server started and bound to /0.0.0.0:6362
2013-07-17 21:05:09.271+0000 INFO [o.n.k.i.t.x.XaLogicalLog]: Non clean shutdown detected on log [/opt/pricing/data/database/app/index/lucene.log.2]. Recovery started ...
2013-07-17 21:05:09.271+0000 INFO [o.n.k.i.t.x.XaLogicalLog]: [/opt/pricing/data/database/app/index/lucene.log.2] logVersion=3 with committed tx=317
最有趣的是,我们将数据库复制到桌面并创建了一个小程序,只需启动数据库然后将其关闭并针对数据库运行。它只是在几秒钟内恢复没有问题(这可能是因为挂起过程部分恢复了数据库,但我们不这么认为,因为如果我们杀了它并尝试运行它,应用程序确实会恢复数据库再次) 我们在linux机器上重复了这个,但结果相同。
我们显然正在努力尝试确保在应用程序意外终止时调用shutdown,但真正的问题是为什么启动时恢复过程会挂起? 我们确实找到了以下https://groups.google.com/forum/#!msg/neo4j/CBvuMybTRFw/NMIOpBjrIYIJ,但是它讨论了将数据库作为服务器运行并且只是增加了超时。虽然messages.log中的点与我的位置完全相同。
作为一种临时解决方案,如果恢复工作暂停,我们可以运行这个小小的假人。程序,以查看数据库是否会得到修复,但宁愿找到根本原因。
有人有什么建议吗?
答案 0 :(得分:0)
当你说它挂起时,CPU /内存/磁盘会做什么?一切都安静吗?
此外,如果您执行jstack或配置文件或类似的JVM进行恢复,那么“主”线程会做什么?
提供这些问题的答案会有很大帮助。