加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Neo4J 3.x比Neo4J 2.x使用更多内存?怎么避免呢?

发布时间:2020-12-15 01:08:57 所属栏目:Java 来源:网络整理
导读:我将我的Graph DB从Neo4J 2.0.4更新到Neo4J 3.3.3,当我用我的应用程序运行它时,它现在使用的内存比以前多两倍(我的Mac上的java进程). (我在Mac上运行Java 1.8) 当我启动Neo4J 2时,它使用大约250Mb来执行相同的任务和查询.但Neo4J 3使用大约500Mb. 我认为更新

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

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

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

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

最佳答案
Neo4j基于JVM,其内存消耗取决于Heap的大小.

如果你没有配置它的大小,Neo4j有一个heursitic来计算它,并且当这个启发式改变时.

在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使用pagecache机制,它将RAM的某些部分放入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中配置这个内存siz,但是规则为3很容易计算(服务器RAM =堆页面缓存索引操作系统的一些空闲内存).

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

$> du -sh data/databases/graph.db/indexes

结论

从Neo4j 2开始,有很多改进(功能,性能),所以是的,效率更高.

关于RAM上的指纹效率更高,我不知道,我从未做过这样的测试,但RAM现在很便宜.

我唯一可以告诉你的是,你应该需要一个较小的堆,数据缓存现在是堆的.在2.X中,Neo4j在内存中保留了一个图表以便快速访问.

但是Neo4j是高度可配置的,所以如果你有一个小型服务器并想要微调内存消耗,你必须设置堆和pagecache大小.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读