elasticseach jvm heap size

官方推荐 [2.0]
  • 来源 JVM Heap Sizes | Elastic Cloud Enterprise Reference [2.0]
  Elasticsearch clusters and JVM Heap Size
      The ideal heap size is somewhere below 32 GB, as heap sizes above 32 GB become less efficient. 
What these recommendations mean is that on a 64 GB cluster, 
we dedicate 32 GB to the Elasticsearch heap and 32 GB to the operating system in the container that hosts your cluster.
  • 大意是需要低于 32G 一般设置50% jvm 50% OS for cacahe for luence
  • 128G 可以部署 两个实例
官方推荐 [8.0]
      By default, Elasticsearch automatically sets the JVM heap size based on a node’s roles and total memory. We recommend the default sizing for most production environments.

Automatic heap sizing requires the bundled JDK or, if using a custom JRE location, a Java 14 or later JRE.

If needed, you can override the default sizing by manually setting the JVM heap size.
  • 大意就是 会自动根据节点角色 自动设置jvm heap size 需要使用 bundled JDK or Java 14 or later JRE
  • 如果设置的话需要设置为50%

为何有这个限制

  • jvm 压缩指针 超过32G 会失效
  • jvm 默认8 byte内存对齐

计算方式

  • 内存读取都是按照byte读取 也就是 8bit 一般4bit可以用一个16进制标识
  • 1024(M) * 1024 (kB) * 1024(B) * 4 = 4 G
  • 8字节对齐 4G * 8 = 32 G

调整压缩指针

  • 来源 JVM Anatomy Quark #24: Object Alignment
  • -XX:ObjectAlignmentInBytes
    • 取值:8~ 128
    • 要求:必须是8的整数倍
直接调整对齐会减缓 压缩指针失效吗?
  • 直接说答案 可以的 更大的对齐将会延迟这一限制,对齐越大,内存空间越大
    • -XX:ObjectAlignmentInBytes = 8
      • 默认 8 字节对齐,那么最低 3 位是零,移动 3 位, 2(32+3)字节 = 32 GB 压缩引用空间
    • -XX:ObjectAlignmentInBytes = 16 压缩指针失效阈值:1024G
      • 移动 4 位, 2(32+3)字节 = 64 GB 压缩引用空间
会有什么副作用吗?
  • 理论:为什么要内存对齐?

    • x86
      • 平台通常接受未对齐的读写操作,跨越两个缓存行的未对齐 CAS 操作也可以工作,但是对齐可以提高吞吐量
      • 对于跨越多个缓存行的数据,x86 平台也不会保证访问的原子性,这可能发生在未对齐的情况下
    • 其它平台
      * 可能会直接拒绝这样的原子操作 产生一个 SIGBUS 信号或者另外一种硬件异常
    • jvm :所以对于 Java 对象中的 long 字段,这占用 8 字节内存,基于性能因素,我们需要保证 8 字节对齐
  • 优势:

    • 对齐变大,就意味着每个对象平均的内存空间浪费将会增加。
      • 例如将对象对齐从 16 字节增加至 128 字节
      • 每个实例 128 字节,而只有 8 字节有用数据
    • 增大对齐增加了平均对象大小:16 字节和 32 字节对齐“稍微”增加了对象大小,
    • 64 字节大幅增加了平均对象大小。注意对象对齐基本上表示对象的最小大小,一旦最小值增加了,平均值也会增加
  • 缺点:

    • 造成浪费
    • 堆内存会变大
    • 某些情况下对齐变大导致的对象变大将会与压缩引用减少的空间占用相抵消。
    • 当压缩引用最后被关闭时,对齐的成本就表现出来了
posted @ 2022-07-20 11:03  vx_guanchaoguo0  阅读(89)  评论(0编辑  收藏  举报