在官方文档中【https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html】:


Elasticsearch 在jvm.options中指定了Xms(最小)和Xmx(最大)的堆的设置。所设置的值取决于你的服务器的可用内存大小。好的规则应满足:


1、最小堆的大小和最大堆的大小应该相等。


2、Elasticsearch可获得越多的堆,并且内存也可以使用更多的缓存。但是需要注意,分配了太多的堆给你的项目,将会导致有长时间的垃圾搜集停留。


3、设置最大堆的值不能超过你物理内存的50%,要确保有足够多的物理内存来保证内核文件缓存。


4、不要将最大堆设置高于JVM用于压缩对象指针的截止值。确切的截止值是有变化,但接近32gb。您可以通过在日志中查找以下内容来验证您是否处于限制以下:

heapsize[1.9gb],compressedordinaryobjectpointers[true]


5、最好尝试保持在基于零压缩oops的阈值以下;当确切的截止值在大多数时候处于26GB是安全的。但是在大多数系统中也可以等于30GB。在启动Elasticsearch之后,你也可以在JVM参数中验证这个限制-XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode和查询类似于下面这一行:

heapaddress:0x000000011be00000,size:27648MB,zerobasedCompressedOops

显示基于零压缩oops有被下面的所代替:

heapaddress:0x0000000118400000,size:28672MB,CompressedOopswithbase:0x00000001183ff000


这里的例子告诉我们如何在jvm.options文件中设置堆值:

-Xms2g#最小堆的值为2g 
-Xmx2g#最大堆的值为2g

也可以通过环境变量来设置堆的值。这可以通过注释掉jvm.options文件中的xms和xmx设置来完成,并通过ES_JAVA_OPTS选择设置这些值:

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