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