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


1

我尝试批量导入具有约4000万个节点和2000万个关系的图形数据库,但是出现outofmemory错误(这已记录在案,我知道了)。在Windows中,我使用的是进口刀具像这样:

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

我有16 GB的RAM,但Neo4j的只分配的最大堆内存3.5 GB,而我仍然有大约11 GB的可用内存。为了解决这个问题,我不会收到一个outofmemory错误,我跟随了一些suggestions在线并在我的C:\ program files \ Neo4j文件夹中创建了一个conf文件夹,并创建了一个neo4j-wrapper.conf文件,并将heap值设置为:

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

另外,我把我的Neo4j属性文件页面缓存设置:

dbms.pagecache.memory=5g 

的问题是,当我重新启动我的Neo4j的应用程序并尝试再次导入,还在说3.5 GB最大的堆空间和11 GB可用RAM ......为什么Neo4j不能识别我的设置?

请注意,我试着下载Neo4j的zip版本,以便使用powershell版本的导入工具,但我遇到了改变我的配置设置但Neo4j没有识别它们的问题。

我真的很感谢这个帮助...谢谢!

1

我找到了解决方案。最终允许我改变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 

现在,当我在Neo4j的壳运行Neo4jImport,它示出了9.75 GB的堆的大小。


2

不能告诉windows,但在linux上neo4j-wrapper.conf不用于neo4j-import工具。相反,你可以通过使用JAVA_OPTS环境变量(再次Linux的语法在这里)额外JVM参数:

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是要走的路。

  0

我应该使用JAVA_OPTS的shell是什么?我打开neo4j.exe,进入命令提示符,然后使用命令(当然是使用我的路径),但它给出了错误“JAVA_OPTS不被识别为内部或外部命令”...... 06 2月. 162016-02-06 15:58:55

  0

正如所提到的草图方法取自Linux。不确定在Windows上如何工作。 06 2月. 162016-02-06 16:27:51

  0

没错,但你基本上会在Linux中做同样的事情?打开Neo4j shell并键入JAVA_OPTS命令? 06 2月. 162016-02-06 16:36:21

+1

不是。 JAVA_OPTS需要设置,例如以cmd为单位。exe之前调用neo4j-import 06 2月. 162016-02-06 16:39:31

  0

我看到,该命令现在执行。我也使用了commandLineFlags参数,但是我没有得到任何输出结果? 06 2月. 162016-02-06 17:05:52


1

一般来说Neo4jImport不应该在一个大堆上实现,它会使用任何可用的堆,然后使用任何可用的堆内存,但是需要有一定量的“样板”内存以使机器正常工作。最近出现了一个修复(2.3.3版本),减少了导入工具的堆使用,这在这里肯定会有所帮助。