gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 20:17:10 24 4
gpt4 key购买 nike

我将我的图形数据库从 Neo4J 2.0.4 更新到 Neo4J 3.3.3,当我用我的应用程序运行它时,它现在使用的内存(我的 Mac 上的 java 进程)比以前多两倍。 (我在我的 Mac 上运行 Java 1.8)

当我启动 Neo4J 2 时,它使用大约 250Mb 来执行相同的任务和查询。但是 Neo4J 3 使用大约 500Mb。

我认为更新应该更有效率?

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

最佳答案

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

如果你没有配置它的大小,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

页面缓存

数据库在磁盘上执行大量 IO。为了快速,它需要将数据放入 RAM。Neo4j 3.X 使用页面缓存机制来做到这一点,该机制将其二进制数据文件的某些部分放入 RAM 中。因此,您最常用的数据都在 RAM 中。

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

# 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 是高度可配置的,所以如果您有一个小型服务器并且想要微调内存消耗,您必须设置堆和页面缓存大小。

关于java - Neo4J 3.x 使用比 Neo4J 2.x 更多的内存?如何避免这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48882553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com