关于Neo4j 3.0.4企业中的查询的NullPointerException

时间:2016-12-30 18:09:01

标签: neo4j cypher spring-data-neo4j spring-data-neo4j-4 neo4j-ogm

我在HA运行Neo4j 3.0.4企业版,遇到了一个非常神秘的问题。从我们的Spring Data Neo4j应用程序执行一个非常基本的Cypher查询(以下内容来自Neo4j DB query.log):

MATCH (n:`Node`) 
WHERE n.`key` = { `key` } 
WITH n 
MATCH p=(n)-[*0..1]-(m) 
RETURN p, ID(n) - {key: 123456}

我收到与页面缓存相关的异常:

java.lang.NullPointerException
    at org.neo4j.io.pagecache.impl.muninn.MuninnPageCursor.assertPagedFileStillMappedAndGetIdOfLastPage(MuninnPageCursor.java:369)
    at org.neo4j.io.pagecache.impl.muninn.MuninnReadPageCursor.next(MuninnReadPageCursor.java:55)
    at org.neo4j.io.pagecache.impl.muninn.MuninnPageCursor.next(MuninnPageCursor.java:121)
    at org.neo4j.kernel.impl.store.CommonAbstractStore.readIntoRecord(CommonAbstractStore.java:1039)
    at org.neo4j.kernel.impl.store.CommonAbstractStore.access$000(CommonAbstractStore.java:64)
    at org.neo4j.kernel.impl.store.CommonAbstractStore$1.next(CommonAbstractStore.java:1179)
    at org.neo4j.kernel.impl.api.store.StoreSingleNodeCursor.next(StoreSingleNodeCursor.java:64)
    at org.neo4j.kernel.impl.api.StateHandlingStatementOperations.nodeCursorById(StateHandlingStatementOperations.java:137)
    at org.neo4j.kernel.impl.api.ConstraintEnforcingEntityOperations.nodeCursorById(ConstraintEnforcingEntityOperations.java:422)
    at org.neo4j.kernel.impl.api.OperationsFacade.nodeGetProperty(OperationsFacade.java:333)
    at org.neo4j.cypher.internal.spi.v3_0.TransactionBoundQueryContext$NodeOperations.getProperty(TransactionBoundQueryContext.scala:316)

然后从现在开始,相同的查询会间歇性地失败,并将记录为一个班轮:

java.lang.NullPointerException

在应用服务器端,我们收到以下通用错误代码:

org.neo4j.ogm.exception.CypherException: Error executing Cypher "Neo.DatabaseError.Statement.ExecutionFailed"
  • 有没有Neo4j专家以前见过这个问题?
  • 在群集中移动主服务器(即重新启动)似乎可以修复它,但如果在服务器上放置了大量负载,则会重新出现。页面缓存应该相当大,因为我有一个8 GB的数据库,并且不仅将堆大小保留为默认值,而且页面缓存大小也未设置,因此它采用其默认值。
  • 日志表明在此异常之前存在大量并发查询(所有查询都发生在同一秒内,并且相当多的查询完全相同)。页面缓存的工作方式是否存在某种竞争条件?并发读取的实际限制是什么?

非常感谢任何建议!

0 个答案:

没有答案