Elasticsearch中设置JVM堆的大小(翻译)

原文链接[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文件中的xmsxmx设置来完成,并通过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]