Neo4J java 驱动程序 - 正确查询内存不足
Neo4J java driver - Out of memory with correct query
我目前遇到 Neo4J 问题,我真的不知道在哪里寻找答案,因为我在低级别调用 java 驱动程序,一切似乎都已检查完毕。
情况:
- 运行ning Neo4J in docker (3.3),给了它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 界面进行相同的查询,则查询执行正常并且 returns 没有结果。如果我通过 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);
我已经很感激关于在哪里可以进一步查看的提示。查询似乎很好,我正在 运行 最新的软件和驱动程序,...我唯一无法检查的是驱动程序本身在水下做什么。
找出问题所在:neo4j-java-驱动程序不处理嵌套查询。我有一个循环遍历 1 个查询的结果。在那个循环中,它使用同一个 Session 对象来执行另一个查询。 OGM 在这种情况下不会抱怨,但 neo4j-java-driver 会抱怨。
我目前遇到 Neo4J 问题,我真的不知道在哪里寻找答案,因为我在低级别调用 java 驱动程序,一切似乎都已检查完毕。
情况:
- 运行ning Neo4J in docker (3.3),给了它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 界面进行相同的查询,则查询执行正常并且 returns 没有结果。如果我通过 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);
我已经很感激关于在哪里可以进一步查看的提示。查询似乎很好,我正在 运行 最新的软件和驱动程序,...我唯一无法检查的是驱动程序本身在水下做什么。
找出问题所在:neo4j-java-驱动程序不处理嵌套查询。我有一个循环遍历 1 个查询的结果。在那个循环中,它使用同一个 Session 对象来执行另一个查询。 OGM 在这种情况下不会抱怨,但 neo4j-java-driver 会抱怨。