重要的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)


分享到:


相關文章: