如何估算初始内存配置
初始和最终的内存配置参数是变化的,这取决于您的存储大小如何变化以及您的工作负载随时间如何增加或变化。
本指南适用于初始配置。
为了确定合适的配置,您需要以下信息
-
托管 Neo4j 的机器上的物理内存量。
-
以下估算值
-
节点数量。
-
关系数量。
-
每个节点和每个关系的平均属性数量。
-
一个相当高级的经验法则是:总物理内存 = 堆 + 页面缓存 + 操作系统内存
。
通常为操作系统预留 1-2GB 就足够了。堆和页面缓存详情如下。
首先,我们需要确定一个合适的堆大小。
堆不应过大,因为这可能在需要进行完整的垃圾回收(GC)周期时导致更长的“停止世界”(Stop-the-World)暂停。堆也应足够大,以便为您的工作负载提供足够的内存。在物理内存量很大(>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 没有持续使用其全部堆内存时。
本页有帮助吗?