1、JAVA(JVM)版本
Elasticsearch是基于Java构建的,需要至少Java8来运行它。只支持Oracle的Java和OpenJDK。所有Elasticsearch节点和客户机都应该使用相同的JVM版本。
我们推荐您安装Java1.8.0_131版本或者Java 8发行版系列的后续版本。我们推荐您使用LTS JAVA版本。如果使用了已知的糟糕的Java版本,Elasticsearch将拒绝启动。
Elasticsearch将使用的Java版本可以通过设置JAVA_HOME环境变量进行配置。
2、设置堆大小
默认情况下,Elasticsearch告诉JVM使用最小和最大大小为1 GB的堆。在转移到生产环境时,重要的是配置堆大小,以确保Elasticsearch有足够的可用堆。
Elasticsearch将通过Xms(最小堆大小)和Xmx(最大堆大小)设置分配在jvm.options文件中指定的整个堆。
这些设置的值取决于服务器上可用RAM的数量。好的经验法则是:
- 设置最小堆大小(Xms)和最大堆大小(Xmx)彼此相等。
- 用于Elasticsearch的堆越多,用于缓存的内存就越多。但是请注意,过多的堆会导致长时间的垃圾收集暂停。
- 将Xmx设置为不超过物理RAM的50%,以确保为内核文件系统缓存留有足够的物理RAM。
- 不要将Xmx设置在JVM用于压缩对象指针的截止值之上(压缩的oops);具体的截止值各不相同,但接近32GB。您可以通过在日志中查找如下所示的行来验证是否超出了限制:
heap size [1.9gb], compressed ordinary object pointers [true]
- 更好的是,尽量保持在基于零压缩的阈值以下;具体的截止值各不相同,但是在大多数系统上26GB是安全的,但在某些系统上可能高达30GB。您可以通过使用JVM选项启动Elasticsearch来验证您是否受到了限制 -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode,寻找这样的一行:
heap address: 0x000000011be00000, size: 27648 MB, zero based Compressed Oops
显示启用了从零开始的压缩oops而不是:
eap address: 0x0000000118400000, size: 28672 MB, Compressed Oops with base: 0x00000001183ff000
下面是如何通过jvm.options文件设置堆大小的例子:
-Xms2g
-Xmx2g
- 将最小堆大小设置为2g
- 将最大堆大小设置为2g
还可以通过环境变量设置堆大小。这可以通过注释掉jvm.options文件中的Xms和Xmx设置来实现并通过ES_JAVA_OPTS设置这些值:
ES_JAVA_OPTS="-Xms2g -Xmx2g" ./bin/elasticsearch
ES_JAVA_OPTS="-Xms4000m -Xmx4000m" ./bin/elasticsearch
- 设置最小和最大堆大小为2gb
- 设置最小和最大堆大小为4000 MB
注意:为Windows服务配置堆与上述配置不同。Windows服务最初填充的值可以如上配置,但在安装服务之后会有所不同。有关更多细节,请参阅Windows服务文档。
3、JVM堆转储路径
默认情况下,Elasticsearch配置JVM将堆从内存溢出异常转储到默认数据目录(/var/lib/elasticsearch是针对RPM和Debian包发行版的,Elasticsearch安装根目录下的data目录是针对tar和zip存档发行版的)如果此路径不适合接收堆转储,则应修改条目-XX:HeapDumpPath=…在jvm.options文件中。如果指定目录,JVM将根据运行实例的PID为堆转储生成一个文件名。如果指定的是固定文件名而不是目录,那么当JVM需要对内存溢出异常执行堆转储时,文件必须不存在,否则堆转储将失败。
4、GC日志记录
默认情况下,Elasticsearch启用GC日志。这些都是在jvm.options中配置的和默认设置到与Elasticsearch日志相同的默认位置。默认配置每64 MB旋转日志一次,最多可以消耗2 GB的磁盘空间。
5、JVM致命错误日志
默认情况下,Elasticsearch配置JVM将致命错误日志写入默认日志目录(/var/log/elasticsearch是RPM和Debian包发行版的,Elasticsearch安装根目录下的logs目录是针对tar和zip存档发行版的)。这些日志是JVM遇到致命错误(例如,分割错误)时生成的。如果这个路径不适合接收日志,您应该在jvm.options文件中修改条目-XX:ErrorFile=…为一个替代路径。