当前位置: 首页 > 知识库问答 >
问题:

neo4j bulk.csv导入的垃圾收集调优/性能降低

秦博延
2023-03-14

我正在运行一个neo4j实例中的数据大容量导入(我在2.2.0社区版和企业版以及2.1.7社区版上运行过),该实例在服务器模式下运行。我的应用程序在内存中创建了一组节点,并会在中间停止编写一个series.csv文件,并向neo4j实例发送cypher以上传这些文件。(这是由于使用普通的旧REST API运行应用程序时的性能问题造成的)。

MERGE (:{NODE_TYPE} {csvLine.key = n.primaryKey}) on create set [PROPERTY LIST];

语句,并且我对所有进行合并的对象都有索引。这感觉不像是insert语句中的降级,因为减速不是线性的,而是双峰的,这感觉就像是在neo4j实例中有垃圾收集。优化neo4j JVM垃圾收集器以进行频繁的批量插入的最佳方法是什么?

NEO4J.属性:

neostore.nodestore.db.mapped_memory=50M
neostore.relationshipstore.db.mapped_memory=500M
#neostore.relationshipgroupstore.db.mapped_memory=10M
neostore.propertystore.db.mapped_memory=100M
#neostore.propertystore.db.strings.mapped_memory=130M
neostore.propertystore.db.arrays.mapped_memory=130M

neo4j-wrapper.conf:

wrapper.java.additional=-XX:+UseConcMarkSweepGC
wrapper.java.additional=-XX:+CMSClassUnloadingEnabled
wrapper.java.additional=-XX:-OmitStackTraceInFastThrow
wrapper.java.additional=-XX:hashCode=5

wrapper.java.initmemory=8194
wrapper.java.maxmemory=8194
USING PERIODIC COMMIT 110000 LOAD CSV WITH HEADERS FROM 'file:///home/jschirmer/Event_2015_4_773476.csv' AS csvLine MERGE (s:Event {primaryKey: csvLine.primaryKey}) ON CREATE SET s.checkSum= csvLine.checkSum,s.epochTime= toInt(csvLine.epochTime),s.epochTimeCreated= toInt(csvLine.epochTimeCreated),s.epochTimeUpdated= toInt(csvLine.epochTimeUpdated),s.eventDescription= csvLine.eventDescription,s.fileName= csvLine.fileName,s.ip= csvLine.ip,s.lineNumber= toInt(csvLine.lineNumber),s.port= csvLine.port,s.processPid= csvLine.processPid,s.rawEventLine= csvLine.rawEventLine,s.serverId= csvLine.serverId,s.status= toInt(csvLine.status);

USING PERIODIC COMMIT 110000 LOAD CSV WITH HEADERS FROM 'file:///home/jschirmer/Event__File_2015_4_773476.csv' AS csvLine MATCH (n:SC_CSR{primaryKey: csvLine.Event_id}), (s:File{fileName: csvLine.File_id}) MERGE n-[:DATA_SOURCE]->s;

我没有运行印花的侧写。我会这么做,但我认为通过在create语句上使用MERGE...可以避免急切的merget问题。

共有1个答案

戈曾琪
2023-03-14

一般来说,您的配置看起来不错,您的机器有什么RAM?

对于合并的对象,我建议使用约束而不是索引

你的tx尺寸是多少?您运行了多少并发tx?

您的CSV文件有多大?

参见:http://neo4j.com/developer/guide-import-csv/

 类似资料:
  • 问题内容: 我正在寻找有关如何在低延迟至关重要的环境中最大程度地调整年轻一代(相对于老一代)的争论。 我自己的测试倾向于表明,当年轻一代相当大时(例如-XX:NewRatio <3),延迟是最低的,但是我不能直觉地认为年轻一代越大,进行垃圾处理的时间就越多收集。 该应用程序在Linux 64位jdk 6上运行。 内存使用量大约是启动时加载的50万兆个长寿命对象(=数据缓存),并且从那里仅创建(很多

  • 简介 在本篇文章呢,我来介绍一下JavaScript中的垃圾回收的垃圾回收 JavaScript中的垃圾 来看一下在JavaScript中什么样的内容会被当做是垃圾,在我们后续的GC算法当中, 也会存在了一个垃圾的概念,两者的其实是完全一样的,所以在这里说明首先对于我们前端开发来说的。 JavaScript中内存管理是自动的,每当创建一个数组、对象或者函数的时候呢, 它就会自动的去分配相应

  • 问题内容: 您可以简单地通过调用Java来进行垃圾回收,但有时这会使应用程序“停滞”。这样垃圾收集并避免停顿是一个坏主意: 还是可能导致更多问题? 问题答案: 是的,在大多数情况下,调用System.gc()是一个非常糟糕的主意。有例外,但例外很少,最好花一些时间来确保自己不会在GC环境中做会损害性能的事情,并且学习并确保自己了解gc的工作方式比尝试自己处理它要好得多。显式调用System.gc(

  • 问题内容: 有人可以解释一下G1垃圾收集器的工作原理吗?我还无法在任何地方找到任何全面,易于理解的描述。 谢谢 问题答案: 收集器将堆分成固定大小的区域,并跟踪这些区域中的实时数据。它将一组指针(“记住的集”)保留在区域内和区域外。当认为有必要使用GC时,它将首先收集实时数据较少的区域(因此,“垃圾优先”)。通常,这意味着一步就可以收集整个区域:如果进入一个区域的指针数量为零,则无需对该区域进行标

  • Kubernetes 垃圾收集器的角色是删除指定的对象,这些对象曾经有但以后不再拥有 Owner 了。 注意:垃圾收集是 beta 特性,在 Kubernetes 1.4 及以上版本默认启用。 Owner 和 Dependent 一些 Kubernetes 对象是其它一些的 Owner。例如,一个 ReplicaSet 是一组 Pod 的 Owner。具有 Owner 的对象被称为是 Owner

  • 我遇到了一个JNI程序随机内存不足的问题。 这是一个32位java程序,它读取文件,进行一些图像处理,通常使用250MB到1GB。然后丢弃所有这些对象,然后程序对通常需要100-250MB的JNI程序进行一系列调用。 当交互运行时,我从未见过问题。但是,当对许多文件连续运行批处理操作时,JNI程序将随机运行内存溢出。它可能对一个或两个文件有内存问题,然后对下一个10个文件运行正常,然后再次出现故障