java - 无法查询 Neo4J 数据库并出现内存不足错误

标签 java neo4j

我们有一个中等大小的图,有 6330318 个节点和 6779549 个关系。导入数据后,我无法启动neo4j服务器或neo4j shell。两者都失败并出现 超出 GC 开销限制 错误。我为 JVM 提供的最大堆空间大小为 12 GB。服务器有 15GB RAM。 neo4j.properies 具有以下内存映射 IO 配置。

neostore.nodestore.db.mapped_memory=400M
neostore.relationshipstore.db.mapped_memory=520M
neostore.propertystore.db.mapped_memory=100M
neostore.propertystore.db.strings.mapped_memory=10M
neostore.propertystore.db.arrays.mapped_memory=10M

图表中没有任何属性,因此属性存储相关设置的值如此之低。

我还编写了一个用于查询图形的小型 Web 应用程序,该应用程序部署在 Tomcat 上。这也无法查询图表,并出现以下错误

java.lang.OutOfMemoryError: Java heap space
    java.util.Arrays.copyOf(Arrays.java:2245)
    java.util.Arrays.copyOf(Arrays.java:2219)
    java.util.ArrayList.grow(ArrayList.java:242)
    java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:216)
    java.util.ArrayList.ensureCapacityInternal(ArrayList.java:208)
    java.util.ArrayList.add(ArrayList.java:440)
    org.apache.lucene.index.FieldInfos.addInternal(FieldInfos.java:216)
    org.apache.lucene.index.FieldInfos.read(FieldInfos.java:361)
    org.apache.lucene.index.FieldInfos.<init>(FieldInfos.java:74)
    org.apache.lucene.index.SegmentCoreReaders.<init>(SegmentCoreReaders.java:80)
    org.apache.lucene.index.SegmentReader.get(SegmentReader.java:116)
    org.apache.lucene.index.SegmentReader.get(SegmentReader.java:94)
    org.apache.lucene.index.DirectoryReader.<init>(DirectoryReader.java:105)
    org.apache.lucene.index.ReadOnlyDirectoryReader.<init>(ReadOnlyDirectoryReader.java:27)
    org.apache.lucene.index.DirectoryReader$1.doBody(DirectoryReader.java:78)
    org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:709)
    org.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:72)
    org.apache.lucene.index.IndexReader.open(IndexReader.java:256)
    org.neo4j.kernel.api.impl.index.LuceneLabelScanStore.init(LuceneLabelScanStore.java:249)
    org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.init(LifeSupport.java:483)
    org.neo4j.kernel.lifecycle.LifeSupport.init(LifeSupport.java:72)
    org.neo4j.kernel.impl.nioneo.xa.NeoStoreXaDataSource.start(NeoStoreXaDataSource.java:423)
    org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:507)
    org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:115)
    org.neo4j.kernel.impl.transaction.XaDataSourceManager.start(XaDataSourceManager.java:164)
    org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:507)
    org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:115)
    org.neo4j.kernel.InternalAbstractGraphDatabase.run(InternalAbstractGraphDatabase.java:339)
    org.neo4j.kernel.EmbeddedGraphDatabase.<init>(EmbeddedGraphDatabase.java:59)
    org.neo4j.graphdb.factory.GraphDatabaseFactory$1.newDatabase(GraphDatabaseFactory.java:90)
    org.neo4j.graphdb.factory.GraphDatabaseBuilder.newGraphDatabase(GraphDatabaseBuilder.java:199)
    com.socialtwist.rnet.web.RnetNeo4jServlet.init(RnetNeo4jServlet.java:44)

我们已将应用程序部署在具有 16 GB RAM 的服务器上,并为 Tomcat 提供了 12 GB 的堆空间。 Neo4J 还有哪些其他调整选项可以使其在合理的响应时间下工作?

最佳答案

您的图表中有多少个标签?您的图表和查询有些问题。我认为您将标签(类型)与 id 混淆了

在 :User(id) 上创建索引;

匹配(裁判:用户)<-[:IS_FRIEND_OF]-(推荐人:用户) WHERE Referee.id=1677523 RETURN 推荐人;

修复图形模型后应立即返回,即删除所有数字标签

关于java - 无法查询 Neo4J 数据库并出现内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26966774/

相关文章:

neo4j - SDN 3.3.0 还是 SDN 4.0M1?

java - 停止 neo4j jdbc 将查询打印到控制台

java - 向实现类添加功能而不更改实现的接口(interface)

mysql - 如果担心数据丢失,低预算的新生应用程序是否需要高可用性?

neo4j - 如何缓存可为每个用户自定义的 channel 聚合提要?

java - 当我执行 Files.write 时,Wildfly 正在使用文件

Neo4j 变量作为属性名称

java - 如何找到列表的所有路径?

java - 递归溢出

java - Android 从 C2DM 注册类更新 UI