原英文版地址: https://www.elastic.co/guide/en/elasticsearch/reference/7.7/jvm-options.html, 原文档版权归 www.elastic.co 所有
本地英文版地址: ../en/jvm-options.html

设置 JVM

你应该很少需要更改 Java虚拟机(JVM)选项。 如果这样做,最有可能的修改是设置 堆大小。 本文档的剩余部分详细的解释了如何设置 JVM 选项。 你可以使用 jvm.options 文件 或 环境变量 ES_JAVA_OPTS 来设置选项。

设置或覆盖 JVM 选项的首选方法是通过 JVM 选项文件。

从 tar 或 zip 发行版安装时,jvm.options的根配置文件是config/jvm.options,自定义的 JVM 选项文件可以添加到 config/jvm.options.d/

当从 Debian 或 RPM 安装包安装时,jvm.options的根配置文件是/etc/elasticsearch/jvm.options,自定义的 JVM 选项文件可以添加到 /etc/elasticsearch/jvm.options.d/

当使用 Elasticsearch 的 Docker 发行版 时,你可以绑定挂载 自定义的 JVM 选项文件到 /usr/share/elasticsearch/config/jvm.options.d/

你应该永远也不需要修改 jvm.options 根文件,而应该使用自定义的 JVM 选项文件。 自定义 JVM 选项的处理顺序是按字母顺序排列。

JVM 选项文件必须有后缀.options,并包含一个按特殊语法以行分隔的 JVM 参数列表:

  • 仅包含空白的行会被忽略
  • #开头的行被视为注释并被忽略

    # this is a comment
  • -开头的行被视为独立于 JVM 版本应用的 JVM 选项

    -Xmx2g
  • 以数字开头、后跟一个:再后跟一个-的行被视为一个 JVM 选项,仅当JVM的版本与数字匹配时才适用

    8:-Xmx2g
  • 以数字开头、后跟一个-再后跟一个:的行被视为一个 JVM 选项,仅当 JVM 版本大于或等于该数字时才适用

    8-:-Xmx2g
  • 以数字开头、后跟一个-再后跟数字、后跟:的行被视为一个 JVM 选项,仅当 JVM 的版本在这两个数字的范围内时才适用

    8-9:-Xmx2g
  • 所有其他行都被拒绝

设置 Java 虚拟机选项的另一种机制是通过 环境变量ES_JAVA_OPTS。例如:

export ES_JAVA_OPTS="$ES_JAVA_OPTS -Djava.io.tmpdir=/path/to/temp/dir"
./bin/elasticsearch

当使用 RPM 或 Debian 安装包时,可以在系统配置文件中指定ES_JAVA_OPTS

JVM 有一个内置的机制来观察 环境变量JAVA_TOOL_OPTIONS。 我们有意在打包脚本中忽略这个环节变量。 这样做的主要原因是,在某些操作系统(例如 Ubuntu)上,默认情况下通过这个环境变量安装了代理,我们不希望它干扰 Elasticsearch。

此外,一些其他的 Java 程序支持 环境变量JAVA_OPTS。 这不是JVM内置的机制,而是生态系统中的约定。 但是,我们不支持这个环境变量,而是支持通过jvm.options文件或环境变量ES_JAVA_OPTS来设置 JVM 选项,如上所述。