知识库

如何估计初始内存配置

初始和最终的内存配置参数可能会随着存储规模的变化以及工作负载随时间的增长或变化而不断调整。

此指南适用于初始配置。

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

  • 承载 Neo4j 的机器上的物理内存容量。

  • 以下方面的估计

    • 节点数量。

    • 关系数量。

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

一个相当高层次的经验法则是 Total Physical Memory = Heap + Page Cache + OS Memory

通常为操作系统预留 1-2GB 足矣。堆和页面缓存的详细说明如下。

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

堆不应设置得过大,因为在需要完整垃圾回收(GC)周期时,这会导致更长的 Stop-the-World 暂停。堆也必须足够大,以满足工作负载的内存需求。在物理内存较大的系统(>56GB)上,将堆保持在 16GB 及以下通常效果良好。

其次,考虑页面缓存。

这里会把存储文件映射到主内存中,以便更快访问。默认的页面缓存大小为可用内存的 50%。一个好的经验法则是存储 size + expected growth + 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 并未持续使用全部堆时。

© . This site is unofficial and not affiliated with Neo4j, Inc.