Neo4J java驱动程序 - 内存不正确,查询正确

时间:2018-04-27 16:01:56

标签: java neo4j out-of-memory driver

我目前遇到的是Neo4J问题而且我真的不知道在哪里寻找答案,因为我在低级别调用java驱动程序,而且一切似乎都要检查。

情况:

  • 在docker(3.3)中运行Neo4J,给它14G的内存
  • 使用java 8
  • 它与OGM合作,处理大量数据和大量查询
  • 通过java与neo4j-ogm-core 3.1.0讨论它,neo4j-java-driver 1.5.2

现在,出于性能原因,我正在重构我的项目以使用低级别的java驱动程序而不是OGM驱动程序。运行良好的查询如下:

MATCH (s:Sentence)<-[:SENTENCE_OF]-(:Paragraph)<-[:CONTAINS]-(d:Document) WHERE id(d) = {docid} RETURN s.sentence as t
parameters = {docid=2681031}

其中一个查询会挂起:

MATCH  (w0:Word) , (w0:Word)<-[:CONTAINS_WORD]-(:Sentence)-[:SENTENCE_OF]-(:Paragraph)<-[:CONTAINS]-(d:Document)  WHERE w0.originalTextLower = {wT0} AND  id(d) = {docid}  RETURN w0
parameters = {wT0=abo, docid=2681032}

如果我通过Web界面运行相同的查询,查询执行正常并且不返回任何结果。如果我通过java驱动程序运行它,它会将CPU使用率提高到100%并自行运行到地面:

#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 875036672 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /hs_err_pid378.log
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x000000063b400000, 875036672, 0) failed; error='Cannot allocate memory' (errno=12)

我通过org.neo4j.driver.v1.Session对象调用此语句,如下所示:

session.run(statementTemplate, parameters);

我已经明白了在哪里可以看得更远。查询似乎没问题,我正在运行最新的软件和驱动程序,......我唯一能检查的是驱动程序本身在水下的行为。

1 个答案:

答案 0 :(得分:0)

找出问题所在:neo4j-java-driver不处理嵌套查询。我有一个循环迭代1个查询的结果。在该循环中,它使用相同的Session对象来执行另一个查询。在那种情况下,OGM不会抱怨,但neo4j-java-driver会这样做。