默认情况下,Elasticsearch告诉JVM使用最小和最大大小为1 GB的堆。迁移到生产环境时,配置堆大小以确保Elasticsearch有足够的可用堆是很重要的。
Elasticsearch将通过(最小堆大小)和(最大堆大小)设置分配jvm.options中指定的整个堆 。您应该将这两个设置设置为彼此相等。XmsXmx
这些设置的值取决于服务器上可用的RAM量:
- 设置
Xmx并且Xms不超过物理RAM的50%。Elasticsearch需要内存用于JVM堆以外的其他目的,为此留出空间很重要。例如,Elasticsearch使用堆外缓冲区进行有效的网络通信,依赖操作系统的文件系统缓存来有效访问文件,而JVM本身也需要一些内存。使用比使用该Xmx设置配置的限制更多的内存来观察Elasticsearch进程是正常的。 - 设置
Xmx并且Xms不超过JVM用于压缩对象指针的阈值(压缩oops); 确切的阈值变化但接近32 GB。您可以通过在日志中查找如下所示的行来验证您是否低于阈值:堆大小[1.9gb],压缩普通对象指针[true] - 理想情况下设置
Xmx并且Xms不超过基于零的压缩oops的阈值; 确切的阈值会有所不同,但大多数系统上26 GB是安全的,但在某些系统上可能高达30 GB。您可以通过使用JVM选项启动Elasticsearch-XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode并查找如下所示的行来验证您是否低于此阈值 :堆地址:0x000000011be00000,大小:27648 MB,基于零的压缩哎呀显示已启用从零开始的压缩oops。如果未启用从零开始的压缩oops,则会看到如下所示的行:堆地址:0x0000000118400000,大小:28672 MB,带基数的压缩哎呀:0x00000001183ff000
Elasticsearch可用的堆越多,它可用于其内部缓存的内存就越多,但它为操作系统用于文件系统缓存的内存就越少。此外,较大的堆可能导致更长的垃圾收集暂停。
以下是如何通过jvm.options文件设置堆大小的示例:
- Xms2g - Xmx2g
| 将最小堆大小设置为2g。 | |
| 将最大堆大小设置为2g。 |
也可以通过环境变量设置堆大小。这可以通过注释掉来完成Xms,并Xmx设置在 jvm.options文件中,并通过设置这些值ES_JAVA_OPTS:
ES_JAVA_OPTS = “-Xms2g -Xmx2g” ./ 箱/ elasticsearch ES_JAVA_OPTS = “-Xms4000m -Xmx4000m” ./ 箱/ elasticsearch
| 将最小和最大堆大小设置为2 GB。 | |
| 将最小和最大堆大小设置为4000 MB。 |

为Windows服务配置堆不同于上面的堆。最初为Windows服务填充的值可以如上配置,但在安装服务后不同。有关其他详细信息,请参阅Windows服务文档。