3.3.6. 堆大小设置
默认情况下,Elasticsearch 会告诉 JVM 使用最大和最小1 GB的堆。在转移至生产环境中,配置堆大小以确保 Elasticsearch 有足够的可用堆是十分重要。
Elasticsearch 将通过 [jvm.options] (3.2.1 JVM 参数设置 "设置 JVM 参数") 中指定整个堆。Xms
(最小堆大小)和Xmx
(最大堆大小)设置,你应该让这2个参数相等。
这些设置的值取决于服务器上的内存大小:
-
Xmx
和Xms
设置不应该超过宿主机内存的50%。Elasticsearch 需要用户JVM堆以外的其他用途的内存,为此留出多余部分是非常重要的。例如:Elasticsearch 使用堆外缓冲区进行高效的网络通信,依赖操作系统的文件系统缓存来有效的访问文件,而 JVM 本身也需要一些内存。通常观察到 Elasticsearch 进程使用内存多于Xmx
设置限制。 -
Xmx
和Xms
设置不超过 JVM 用于压缩对象指针(压缩 oops ),确切的值会有有所不同,但是接近32G。你可以通过在日志中查找验证是否在阈值之下:[1.9gb], compressed ordinary object pointers [true]
-
理想情况下将
Xmx
和Xms
设置成不大于零压缩 oop 阈值,确切的阈值是变化的,但 26 GB 在大多数系统上是安全的,甚至在某些系统上可以达到 30 GB。您可以通过使用 JVM 选项-XX:+ UnlockDiagnosticVMOptions -XX:+ PrintCompressedOopsMode
启动 Elasticsearch 并查找类似以下的行来验证您是否处于此阈值以下:heap address: 0x000000011be00000, size: 27648 MB, zero based Compressed Oops
以上结果显示:启用了从零开始的压缩 oops 。如果没有启用从零开始的压缩oops,那么您将看到下面这样的一行代码:
heap address: 0x0000000118400000, size: 28672 MB, Compressed Oops with base: 0x00000001183ff000
Elasticsearch可用的堆越多,它可用于其内部缓存的内存就越多,但它留给操作系统用于文件系统缓存的内存就越少。此外,更大的堆可能导致更长的垃圾收集暂停。
下面是通过 jvm.options 文件设置堆大小的示例:
1. -Xms2g
2. -Xmx2g
- 将最小堆大小设置为2g。
- 将最大堆大小设置为2g。
你也可以通过环境变量设置堆大小。这可以通过在 jvm.options
文件,并通过ES_JAVA_OPTS
设置以下值:
ES_JAVA_OPTS="-Xms2g -Xmx2g" ./bin/elasticsearch
ES_JAVA_OPTS="-Xms4000m -Xmx4000m" ./bin/elasticsearch
1.将最小和最大堆大小设置为2 GB。
2.将最小和最大堆大小设置为4000 MB
Windows 服务配置堆与上述不同。最初为 Windows服务填写的值可以如上所述配置,但在安装服务后会有所不同。有关其他详细信息,请查阅 Windows服务文档。
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。