重要的Elasticsearch配置:设置堆的大小(heap size)

默认情况下,Elasticsearch告诉JVM使用最小值和最大值为1 GB的堆。 在迁移到生产环境时,配置堆大小以确保Elasticsearch有足够的可用堆是至关重要的。

Elasticsearch通过在jvm.options文件中设置Xms(最小堆大小)和Xmx(最大堆大小)来指定的整个堆的大小。最小堆的大小和最大堆的大小应该相等。

这些设置的值取决于服务器上可用的内存(RAM)数量:

  • 将Xmx和Xms设置为不超过物理内存(RAM)的50%。 Elasticsearch需要的内存不仅仅用于JVM heap,为此预留出空间非常重要。 例如,Elasticsearch使用堆外缓冲区来进行有效的网络通信,利用操作系统的文件系统缓存来有效地访问文件,并且JVM本身也需要一些内存。
  • 不要将最大堆设置高于JVM用于压缩对象指针的阈值。确切的阈值是有变化,但接近32gb。您可以通过在日志中查找以下内容来验证您是否处于阈值以下:
<code>heap size [1.9gb], compressed ordinary object pointers [true]/<code>
  • 最好尝试保持在基于零基压缩优化(Zero-Based Compressed oops)的阈值以下,当确切的阈值在大多数时候处于26GB是安全的。但是在某些系统中也可以等于30GB。您可以通过使用JVM选项-XX:+ UnlockDiagnosticVMOptions -XX:+ PrintCompressedOopsMode启动Elasticsearch并查找类似于以下内容的行来验证您是否处于此阈值以下:
<code>heap address: 0x000000011be00000, size: 27648 MB, zero based Compressed Oops/<code>

该内容显示了启用零基压缩优化。如果零基压缩优化未启用,你将看到以下内容:

<code>heap address: 0x0000000118400000, size: 28672 MB, Compressed Oops with base: 0x00000001183ff000/<code>

Elasticsearch可用的堆越多,它可用于其内部缓存的内存就越多,但可供操作系统用于文件系统缓存的内存就越少。 同样,较大的堆可能导致较长的垃圾回收暂停。

以下是有关如何通过jvm.options文件设置堆大小的示例:

<code>-Xms2g  #设置最小堆的值为2g
-Xmx2g #设置组大堆的值为2g/<code>

也可以通过环境变量设置堆大小。 这可以通过注释掉jvm.options文件中的Xms和Xmx设置并通过ES_JAVA_OPTS设置这些值来完成:

<code>ES_JAVA_OPTS="-Xms2g -Xmx2g" ./bin/elasticsearch #设置最小和最大堆的值为2g
ES_JAVA_OPTS="-Xms4000m -Xmx4000m" ./bin/elasticsearch #设置最小和最大堆的值为 4000M/<code>

注意:Windows服务的堆配置与上述不同。 可以为Windows服务初始填充的值可以如上所述配置,但在安装服务后会有所不同。


重要的Elasticsearch配置:设置堆的大小(heap size)


分享到:


相關文章: