原文连接[https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html]html
默认状况下,Elasticsearch会告诉JVM使用的堆大小为2GB。当迁移产品,要确保为Elasticsearch配置的堆有足够的空间。windows
Elasticsearch 在jvm.options中指定了Xms(最小)和Xmx(最大)的堆的设置。所设置的值取决于你的服务器的可用内存大小。好的规则应知足:缓存
最小堆的大小和最大堆的大小应该相等。安全
Elasticsearch可得到越多的堆,而且内存也能够使用更多的缓存。可是须要注意,分配了太多的堆给你的项目,将会致使有长时间的垃圾搜集停留。bash
设置最大堆的值不能超过你物理内存的50%,要确保有足够多的物理内存来保证内核文件缓存。服务器
不要将最大堆设置高于JVM用于压缩对象指针的截止值。确切的截止值是有变化,但接近32gb。您能够经过在日志中查找如下内容来验证您是否处于限制如下:markdown
heap size [1.9gb], compressed ordinary object pointers [true]app
最好尝试保持在基于零压缩oops的阈值如下;当确切的截止值在大多数时候处于26GB是安全的。可是在大多数系统中也能够等于30GB。在启动Elasticsearch以后,你也能够在JVM参数中验证这个限制-XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode
和查询相似于下面这一行:jvm
heap address: 0x000000011be00000, size: 27648 MB, zero based Compressed Oops
显示基于零压缩oops有被下面的所代替:elasticsearch
heap address: 0x0000000118400000, size: 28672 MB, Compressed Oops with base: 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
注意:配置windows服务器和上面的是不一样的。详情参考windows文档[https://www.elastic.co/guide/en/elasticsearch/reference/current/zip-windows.html#windows-service]