知识库

如何估算初始内存配置

根据存储大小的变化以及工作负载随时间推移的增长或变化,初始和最终内存配置参数可能会发生变化。

本指南适用于初始配置。

为了确定合适的配置,您需要以下信息

  • 托管 Neo4j 的机器上的物理内存量。

  • 以下内容的估算值

    • 节点数。

    • 关系数。

    • 每个节点和每个关系的平均属性数。

一个相当高级的经验法则为 总物理内存 = 堆 + 页面缓存 + 操作系统内存

通常为操作系统保留 1-2GB 就足够了。堆和页面缓存将在下面详细介绍。

首先,我们需要确定一个合适的堆大小。

堆不应该过大,因为这会导致在需要进行完整垃圾回收 (GC) 周期时出现更长的停止世界暂停。它也应该足够大,以允许为您的工作负载提供足够的内存。在具有大量物理内存(>56GB)的系统上,通常将堆保持在 16GB 或以下效果很好。

其次,考虑页面缓存。

这是存储文件将被映射到主内存以更快访问的位置。默认页面缓存大小为可用内存的 50%。一个好的经验法则是 存储大小 + 预期增长 + 10%。因此,对于大小为 5GB 的存储,并且您预计在明年存储大小会翻倍,您理想情况下会分配 5GB + 5GB + 1GB = 11GB

对于 Neo4j 2.3 及更高版本,本节不再适用。

最后,让我们看一下对象缓存选项。

对象缓存是节点、关系和其他对象映射到主内存的位置。在 Neo4j 2.2.x 上,默认情况下将其设置为高性能缓存 (hpc)。在小型存储(约 10GB 或更小)上,此缓存性能良好。在大型存储上,您可能会发现关闭缓存(设置 cache_type=none)会获得更好的性能。

如果您正在使用对象缓存并且需要进一步调整它,请考虑从 cache.memory_ratio 选项开始。此选项位于堆内,因此它是用于对象缓存的堆的百分比。默认值为 50%,但您可以稍微增加一点(最高可达 65-70%),尤其是在 JVM 未始终使用其所有堆时。