Neo4j (Windows) - 无法增加 Neo4jImport 工具的堆内存大小

Neo4j (Windows) - can't increase heap memory size for Neo4jImport tool

我尝试批量导入一个包含大约 4000 万个节点和 2000 万个关系的图形数据库,但出现内存不足错误(我知道,这已经记录在案)。在 Windows,我是这样使用导入工具的:

neo4jImport –into SemMedDB.graphdb --nodes nodes1.csv --nodes nodes2.csv --relationships edges.csv 

我有 16 GB 的 RAM,但 Neo4j 只分配了 3.5 GB 的最大堆内存,而我还有大约 11 GB 的空闲 RAM。为了尝试解决此问题,以免出现内存不足错误,我在网上关注了一些 suggestions 并在我的 C:\program files\Neo4j 文件夹中创建了一个 conf 文件夹,并创建了一个 neo4j-wrapper.conf 堆值设置为的文件:

wrapper.java.initmemory=10000
wrapper.java.maxmemory=10000

此外,我将我的 neo4j 属性文件页面缓存设置设置为:

dbms.pagecache.memory=5g

问题是,当我重新启动我的 neo4j 应用程序并尝试再次导入时,它仍然显示 3.5 GB 的最大堆 space 和 11 GB 可用内存...为什么 Neo4j 无法识别我的设置?

请注意,我已尝试下载 Neo4j 的 zip 版本以使用导入工具的 powershell 版本,但我 运行 遇到了更改配置设置的相同问题,但 Neo4j 无法识别它们。

非常感谢您对此提供帮助...谢谢!

无法判断 windows,但 linux neo4j-wrapper.conf 不用于 neo4j-import 工具。相反,您可以使用 JAVA_OPTS 环境变量传递额外的 JVM 参数(此处再次使用 Linux 语法):

JAVA_OPTS="-Xmx10G" bin/neo4j-import 

要验证该方法,请将 -XX:+PrintCommandLineFlags 修改为上述内容。在输出的开头,您应该看到类似于

的一行
-XX:InitialHeapSize=255912576 -XX:MaxHeapSize=4094601216 \n
-XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers \n
-XX:+UseCompressedOops -XX:+UseParallelGC

如果那个出现,使用 JAVA_OPTS 是可行的方法。

我找到了解决办法。最终允许我更改 Neo4jImport 工具的堆大小的是在文本编辑器中打开 neo4jImport.bat 文件(路径为 C:Program files\neo4j\bin)(要求我先更改权限)和将 "set EXTRA_JVM_ARGUMENTS=-Dfile.encoding=UTF-8" 行更改为

set EXTRA_JVM_ARGUMENTS=-Dfile.encoding=UTF-8 -Xmx10G -Xms10G -Xmn2G

现在,当我 运行 Neo4jImport 到 neo4j shell 时,它显示堆大小为 9.75 GB。

通常 Neo4jImport 不应该依赖于大堆,它会使用任何可用的堆,然后使用任何可用的堆外,但是机器需要一定数量的 "boilerplate" 内存才能工作适当地。最近有一个修复程序(在 2.3.3 中出现)减少了导入工具的堆使用,这肯定对这里有所帮助。