转载

Elasticsearch 7.x 的 jvm 内存配置(qbit)

官方文档摘要

jvm.options

  • 一般情况下并不需要更改 JVM 的配置项。
  • 最可能更改的 JVM 配置是堆大小(heap size)
  • 可以使用 jvm.options 配置文件或 ES_JAVA_OPTS 环境变量更改 JVM 配置
  • 首选通过 jvm.options 更改配置

heap size

  • Elasticsearch 通过 jvm.options 中的 Xms 和 Xmx 设置堆的大小
  • 应该讲 Xms 和 Xmx 设为相同的值
-Xms8g 
-Xmx8g
  • Xms 和 Xmx 的值不应超过物理内存的 50% ,因为 Elasticsearch 在堆内存之外还需要将内存用于其他。例如 Elasticsearch 需要利用堆外内存来进行网络通信,依赖操作系统的文件系统缓存来有效访问文件,而JVM本身也需要一些内存。
  • 堆内存的大小不应超过 JVM 用于压缩对象指针的阈值(compressed oops),确切的阈值低于但接近 32 GB ,在大多数情况下 26 GB 是安全的。
  • 如果设置的堆内存大小的值低于阈值,在启动 ES 时在日志中会显示类似如下行
$ bin/elasticsearch
heap size [1.9gb], compressed ordinary object pointers [true]

操作步骤

  • 检查 CompressedOops 阈值
# 32 G,false 表示超过了阈值
$ java -Xmx32768m -XX:+PrintFlagsFinal 2> /dev/null | grep UseCompressedOops
    bool UseCompressedOops    = false    {lp64_product}
# 31G,true 表示在阈值之内
$ java -Xmx31744m -XX:+PrintFlagsFinal 2> /dev/null | grep UseCompressedOops
    bool UseCompressedOops    := true    {lp64_product}
  • 确定堆内存大小的值
# 公式
heapSize = math.floor(RAM/2)  # 物理内存的 50% 下取整
if heapSize > threshold:      # 如果大于阈值,则设为等于(或略小于阈值大小)
    heapSize = threshold
# 例一
# 物理内存 128G,CompressedOops 阈值为 31 G
# 建议启动两个实例,堆内存大小设为 31G
# 例二(最佳实践)
# 物理内存 64G,CompressedOops 阈值为 31 G
# 建议启动一个实例,堆内存大小设为 31G
# 例三
# 物理内存 32G,CompressedOops 阈值为 31 G
# 建议启动一个实例,堆内存大小设为 16G

本文出自qbit snap

原文  https://segmentfault.com/a/1190000022576545
正文到此结束
Loading...