知识卡片

容量规划的经验公式:"JVM+索引大小<物理内存"

普通读书笔记卡

内容

面对”32G物理内存的机器,可用内存似乎在慢慢减少,这正常吗”这类困惑,百姓网团队给出的解释是:物理内存本身要同时被两大块消耗——一部分被JVM进程直接占用,另一部分被Lucene用作系统级别的缓存,随着Lucene索引数据持续增长,被系统缓存占用的内存份额也会跟着增长,这是索引膨胀的自然结果,不代表系统出了问题;除此之外,还可能有其他类型文件缓存也在消耗一部分内存。基于这个理解,团队给出了一条容量规划时应当遵循的经验原则:”JVM+索引大小<物理内存”——也就是说,规划一台机器要承载多大的索引规模时,不能只考虑JVM本身需要多大的堆内存,还必须把索引数据本身占用的(用作系统缓存的)内存空间也计入总的内存预算,两者相加的总量必须留有余量、控制在这台机器物理内存总量以内,否则一旦索引持续增长挤占了本该留给JVM或系统正常运转的内存空间,系统的稳定性和性能都会受到影响。这个经验公式的价值在于它把一个原本容易被简化理解的问题(”这台机器还能撑多久”)拆解成了两个需要分别核算、又必须放在同一个总量约束下考虑的独立变量——JVM本身的内存需求、索引数据占用的缓存内存需求——评估一台机器还有多少容量余量时,不能只看JVM配置了多大的heap size就以为万事大吉,还必须结合索引本身的规模和增长趋势去估算它需要占用的系统缓存空间,两者叠加起来才是这台机器真正需要预留的内存总量。

参考来源

- 位置:《高可用架构(第1卷)》第6章《大数据与数据库》"6.3 百姓网Elasticsearch2.x升级之路"节,"6.3.7 疑问与解惑"(源文件:_epub-src/OEBPS/Text/Chapter6_3_8.xhtml) - 结论依据:原文说明"对32G的内存,JVM会使用一部分内存,Lucene(系统缓存)会使用一部分。越来越少是因为Lucene索引使用了内存,还有一些可能是其他文件的缓存。一般的处理原则是'JVM+索引大小<物理内存'",直接支撑本卡片结论。 - 原始内容:对32G的内存,JVM会使用一部分内存,Lucene(系统缓存)会使用一部分。越来越少是因为Lucene索引使用了内存,还有一些可能是其他文件的缓存。一般的处理原则是"JVM+索引大小<物理内存"。