Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Neo4J 3.x比Neo4J 2.x使用更多内存?如何避免这种情况?_Java_Memory Management_Neo4j_Graph Databases - Fatal编程技术网

Java Neo4J 3.x比Neo4J 2.x使用更多内存?如何避免这种情况?

Java Neo4J 3.x比Neo4J 2.x使用更多内存?如何避免这种情况?,java,memory-management,neo4j,graph-databases,Java,Memory Management,Neo4j,Graph Databases,我将Graph DB从Neo4J 2.0.4更新为Neo4J 3.3.3,当我用我的应用程序运行它时,它现在使用的内存比以前多了两倍(javaprocess on my Mac)。(我在Mac上运行Java 1.8) 当我启动Neo4J 2时,对于相同的任务和查询,它使用了大约250Mb的内存。但是Neo4J 3使用了大约500Mb 我以为更新应该更有效 减少内存使用的可能方法是什么?Neo4j基于JVM,其内存消耗取决于堆的大小 如果您没有配置它的大小,Neo4j有一个启发式算法来计算它,当这

我将Graph DB从Neo4J 2.0.4更新为Neo4J 3.3.3,当我用我的应用程序运行它时,它现在使用的内存比以前多了两倍(
java
process on my Mac)。(我在Mac上运行Java 1.8)

当我启动Neo4J 2时,对于相同的任务和查询,它使用了大约250Mb的内存。但是Neo4J 3使用了大约500Mb

我以为更新应该更有效


减少内存使用的可能方法是什么?

Neo4j基于JVM,其内存消耗取决于堆的大小

如果您没有配置它的大小,Neo4j有一个启发式算法来计算它,当这个启发式算法改变时

在Neo4j 3.X中,有3个内存空间:

JVM堆 堆用于存储所有事务的数据、节点和关系上的锁,以及缓存查询的执行计划

您可以在
conf/neo4j.conf
中配置其大小:

# Java Heap Size: by default the Java heap size is dynamically
# calculated based on available system resources.
# Uncomment these lines to set specific initial and maximum
# heap size.
dbms.memory.heap.initial_size=512m
dbms.memory.heap.max_size=512m
# The default page cache memory assumes the machine is dedicated to running
 # Neo4j, and is heuristically set to 50% of RAM minus the max Java heap size.
dbms.memory.pagecache.size=10g
页面缓存 数据库在磁盘上执行大量IO。为了快速,它需要将数据放入RAM中。 Neo4j 3.X通过pagecache机制实现,该机制将二进制数据文件的某些部分放入RAM中。因此,您最常用的数据是在RAM中

这可以在
conf/neo4j.conf
中配置:

# Java Heap Size: by default the Java heap size is dynamically
# calculated based on available system resources.
# Uncomment these lines to set specific initial and maximum
# heap size.
dbms.memory.heap.initial_size=512m
dbms.memory.heap.max_size=512m
# The default page cache memory assumes the machine is dedicated to running
 # Neo4j, and is heuristically set to 50% of RAM minus the max Java heap size.
dbms.memory.pagecache.size=10g
索引 索引用于快速查找查询的节点,但如果这些索引不在RAM中,则速度会很慢

在Neo4j中没有办法配置这个内存大小,但是使用三个规则很容易计算(服务器RAM=堆+页面缓存+索引+操作系统的一些空闲内存)

您可以使用以下命令计算索引的大小:

$> du -sh data/databases/graph.db/indexes
结论 自Neo4j 2以来,有很多改进(功能性、性能),因此是的,它更高效

更有效的关于RAM上的指纹,我不知道,我从来没有做过这样的测试,但RAM现在很便宜

我唯一能告诉你的是,你应该需要一个更小的堆,数据缓存现在已经脱离堆了。在2.X中,Neo4j在内存中保存了一个图形,以便快速访问


但是Neo4j是高度可配置的,因此如果您有一台小型服务器,并且想要微调内存消耗,则必须设置堆和页面缓存大小。

如何分析Neo4j的内存消耗?您是否进行了一些Neo4j配置(例如这里)或默认设置?这是默认设置,我使用Mac OS XHello中的Activity Monitor对其进行了分析,谢谢您的回答!那么你的意思是我应该设置一个较小的堆大小吗?我不知道,这取决于:)使用较小的堆大小进行测试,看看是否有大量GC(以及内存不足);如果性能适合您的用例等。。。在所有情况下,我明确建议您配置堆大小和页面缓存