有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

将GraphML导入OrientDB时发生java OutOfMemoryError

我正在OrientDB中导入一个中等大小的GraphML文件(大约8GB),我不断收到以下错误:

Importing GRAPHML database from database /root/neo/out.graphml...
Error: java.lang.OutOfMemoryError: GC overhead limit exceeded

我曾尝试在本地或作为远程数据库(remote:localhost)连接到我的数据库,但没有成功。公平地说,远程连接有帮助,但还不够。我还尝试调整控制台应用程序和数据库服务器本身的堆大小(增加到2048)。这也有帮助,但还不够,我也不清楚到底是哪一个帮助了我

考虑到OrientDB本身不使用堆内存进行数据库操作,我想知道导入过程的哪个部分需要这么多堆内存。这里哪个代理(加载graphml的控制台或保存导入结果的数据库)需要更多堆内存,在这种情况下,向java堆分配内存的最佳方式是什么?最后一点:与远程连接同一台机器上的同一个本地数据库(remote:localhost)相比,在本地连接到数据库时,内存分配需求是否有所不同


共 (1) 个答案

  1. # 1 楼答案

    正如orientdb documentation所建议的,您可以使用batchSize参数来减少要处理的批处理大小。默认值为1000。所以你可以试试

    控制台

    orientdb {db=test}> IMPORT DATABASE /tmp/out.graphml batchSize=100
    

    JAVA Api

    new OGraphMLReader(new OrientGraph("plocal:/temp/bettergraph")).setBatchSize(100).inputGraph("/temp/neo4j.graphml");