为neo4j-admin导入设置堆内存

我打算使用neo4j-admin import工具从csv加载数亿个节点的图。导入将运行大约两个小时,但随后由于以下错误而崩溃:

Exception in thread "Thread-0" java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.lang.String.substring(String.java:1969)
at java.util.Formatter.parse(Formatter.java:2557)
at java.util.Formatter.format(Formatter.java:2501)
at java.util.Formatter.format(Formatter.java:2455)
at java.lang.String.format(String.java:2940)
at org.neo4j.unsafe.impl.batchimport.input.BadCollector$RelationshipsProblemReporter.getReportMessage(BadCollector.java:209)
at org.neo4j.unsafe.impl.batchimport.input.BadCollector$RelationshipsProblemReporter.message(BadCollector.java:195)
at org.neo4j.unsafe.impl.batchimport.input.BadCollector.processEvent(BadCollector.java:93)
at org.neo4j.unsafe.impl.batchimport.input.BadCollector$$Lambda$110/603650290.accept(Unknown Source)
at org.neo4j.concurrent.AsyncEvents.process(AsyncEvents.java:137)
at org.neo4j.concurrent.AsyncEvents.run(AsyncEvents.java:111)
at java.lang.Thread.run(Thread.java:748)

我一直在尝试以几种不同的方式调整我的最大堆大小和初始堆大小设置。首先,我尝试在运行命令以按照here加载数据之前简单地创建一个HEAP_SIZE=变量,然后尝试像这样在JVM上设置堆大小:

export JAVA_OPTS=%JAVA_OPTS% -Xms100g -Xmx100g

但是无论导入开始时我使用什么设置,我都会得到相同的报告:

Available resources:
  Total machine memory: 1.48 TB
  Free machine memory: 95.00 GB
  Max heap memory : 26.67 GB
  Processors: 48
  Configured max memory: 1.30 TB
  High-IO: true

如您所见,我正在大型服务器上构建此服务器,该服务器应具有大量可用资源。我假设我没有为Neo4j正确设置JVM参数,但是我找不到在线显示给我正确方法的任何东西。

什么可能导致我的GC内存错误,该如何解决?我可以通过在JVM上投入更多资源来解决此问题吗?如果可以,我该怎么做,以便neo4j-admin导入工具可以使用它?

RHEL 7 Neo4j CE 3.4.11 Java 1.8.0_131

a9165477 回答:为neo4j-admin导入设置堆内存

通过增加最大堆内存已解决了该问题。问题是我没有正确设置堆内存分配。

事实证明,有一个简单的解决方案。这只是我尝试设置堆内存的时间。最初,我在命令行上尝试过命令export JAVA_OPTS='-server -Xms300g -Xmx300g',然后运行bash脚本来调用neo4j-admin import。此操作无效,neo4j-admin import继续使用相同的堆空间配置。

解决方案是简单地包含命令以在名为neo4j-admin import的shell脚本中设置堆内存。我的shell脚本最终看起来像这样:

#!/bin/bash

export JAVA_OPTS='-server -Xms300g -Xmx300g'

/usr/local/neo4j-community-3.4.11/bin/neo4j-admin import \
--ignore-missing-nodes=true \
--database=mag_cs2.graphdb \
--multiline-fields=true \
--high-io=true \

这似乎非常明显,但是我花了将近一个星期的时间才意识到我需要进行更改。希望这可以节省其他人同样的头痛。

本文链接:https://www.f2er.com/3121231.html

大家都在问