默认情况下,Elasticsearch告诉JVM使用最小值和最大值为1 GB的堆。 在迁移到生产环境时,配置堆大小以确保Elasticsearch有足够的可用堆是至关重要的。
Elasticsearch通过在jvm.options文件中设置Xms(最小堆大小)和Xmx(最大堆大小)来指定的整个堆的大小。最小堆的大小和最大堆的大小应该相等。
这些设置的值取决于服务器上可用的内存(RAM)数量:
- 将Xmx和Xms设置为不超过物理内存(RAM)的50%。 Elasticsearch需要的内存不仅仅用于JVM heap,为此预留出空间非常重要。 例如,Elasticsearch使用堆外缓冲区来进行有效的网络通信,利用操作系统的文件系统缓存来有效地访问文件,并且JVM本身也需要一些内存。
- 不要将最大堆设置高于JVM用于压缩对象指针的阈值。确切的阈值是有变化,但接近32gb。您可以通过在日志中查找以下内容来验证您是否处于阈值以下:
heap size [1.9gb], compressed ordinary object pointers [true]
- 最好尝试保持在基于零基压缩优化(Zero-Based Compressed oops)的阈值以下,当确切的阈值在大多数时候处于26GB是安全的。但是在某些系统中也可以等于30GB。您可以通过使用JVM选项-XX:+ UnlockDiagnosticVMOptions -XX:+ PrintCompressedOopsMode启动Elasticsearch并查找类似于以下内容的行来验证您是否处于此阈值以下:
heap address: 0x000000011be000