设置堆大小


默认情况下,Elasticsearch告诉JVM使用最小和最大大小为1 GB的堆。在进入生产阶段时,配置堆大小以确保Elasticsearch有足够的可用堆非常重要。

Elasticsearch将通过(最小堆大小)和(最大堆大小)设置分配​​jvm.options中​​​指定的整个堆 。​​Xms​​​​Xmx​

这些设置的值取决于服务器上可用的RAM数量。好的经验法则是:


  • 将最小堆大小(​​Xms​​​)和最大堆大小(​​Xmx​​)设置为彼此相等。
  • Elasticsearch可用的堆越多,可用于缓存的内存就越多。但是请注意,过多的堆可能会使您长时间停滞垃圾回收。
  • 设置​​Xmx​​为不超过物理RAM的50%,以确保有足够的物理RAM用于内核文件系统缓存。
  • 请勿将其设置​​Xmx​​为高于JVM用于压缩对象指针(压缩oop)的临界值;确切的截止时间有所不同,但接近32 GB。您可以通过在日志中查找如下一行来验证您是否处于限制范围内:
堆大小[1.9gb],压缩的普通对象指针[true]
  • 更好的是,尝试保持在基于零的压缩oop的阈值以下;确切的截止时间有所不同,但是在大多数系统上26 GB是安全的,但是在某些系统上可以达到30 GB。您可以通过使用JVM选项启动Elasticsearch​​-XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode​​并查找类似于以下内容的行来验证您是否处于限制之下:
heap address: 0x000000011be00000, size: 27648 MB, zero based Compressed Oops

显示启用了从零开始的压缩oop,而不是

heap address: 0x0000000118400000, size: 28672 MB, Compressed Oops with base: 0x00000001183ff000


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


-Xms2g 
-Xmx2g


 

将最小堆大小设置为2g。

 

将最大堆大小设置为2g。


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


ES_JAVA_OPTS="-Xms2g -Xmx2g" ./bin/elasticsearch 
ES_JAVA_OPTS="-Xms4000m -Xmx4000m" ./bin/elasticsearch


 

将最小和最大堆大小设置为2 GB。

 

将最小和最大堆大小设置为4000 MB。