如何更改 Elasticsearch 的最大内存大小

我有一个 Apache 服务器,它的默认配置是 Elasticsearch,除了默认配置的最大大小为1GB 之外,其他配置都很完美。

我在 Elasticsearch 没有这么多文档要存储,所以我想减少内存。

我已经看到,我必须在 Java 配置中更改 -Xmx参数,但我不知道如何更改。

我已经看到我可以执行这个:

bin/ElasticSearch -Xmx=2G -Xms=2G

但是,当我不得不重新启动弹性搜索这将丢失。

当 Elasticsearch 作为服务安装时,是否可以更改最大内存使用量?

205016 次浏览

更新于2016年11月24日 : Elasticsearch 5显然已经改变了配置 JVM 的方式。看看这个答案.下面的答案仍然适用于 < 5的版本。

Tirdadc,感谢你在下面的评论中指出这一点。


我有一个粘贴页面,我与其他人分享时,想知道的记忆和 ES。对我来说还行: http://pastebin.com/mNUGQCLY。我把内容也粘贴在这里:

参考文献:

Https://github.com/grigorescu/brownian/wiki/elasticsearch-configuration Http://www.elasticsearch.org/guide/reference/setup/installation/

编辑以下文件以修改内存和文件编号限制。这些说明假设 Ubuntu 10.04,可以在以后的版本和其他发行版/操作系统上使用。(剪辑: 这也适用于 Ubuntu 14.04。)

/etc/security/limited s.conf :

elasticsearch - nofile 65535
elasticsearch - memlock unlimited

/etc/default/elasticsearch (在 CentOS/RH:/etc/sysconfig/elasticsearch) :

ES_HEAP_SIZE=512m
MAX_OPEN_FILES=65535
MAX_LOCKED_MEMORY=unlimited

/etc/elasticsearch/elasticsearch.yml :

bootstrap.mlockall: true

如果你使用 Elasticsearch 的 Github 存储库中提供的服务包装器(在 https://github.com/elasticsearch/elasticsearch-servicewrapper中找到) ,那么 Elasticsearch-servicewrapper/service/Elasticsearch.conf 中的 conf 文件控制内存设置。在 elasticsearch.conf 的顶部有一个参数:

set.default.ES_HEAP_SIZE=1024

只需减少这个参数,比如“ set.default.ES _ HEAP _ SIZE = 512”,就可以减少 Elasticsearch 分配的内存。

注意,如果使用 elasticsearch-wrapper,则 elasticsearch.conf 中提供的 ES _ HEAP _ SIZE 将覆盖所有其他设置。这花了我一点时间来弄明白,因为从文档中看,似乎可以从 elasticsearch.yml 设置堆内存。

如果在其他地方设置了服务包装器设置,比如在/etc/default/elasticsearch,就像在 James 的示例中那样,那么在那里设置 ES _ HEAP _ SIZE。

如果您使用所提供的 RPM/DEB 包安装 ES (看起来您已经安装了) ,那么您可以通过编辑 init 脚本(/etc/init.d/elasticsearch on RHEL/CentOS)来调整它。如果你看一下这个文件,你会看到一个如下的代码块:

export ES_HEAP_SIZE
export ES_HEAP_NEWSIZE
export ES_DIRECT_SIZE
export ES_JAVA_OPTS
export JAVA_HOME

要调整大小,只需将 ES_HEAP_SIZE行更改为以下内容:

export ES_HEAP_SIZE=xM/xG

(其中 x 是您想要分配的 MB/GB 内存数量)

例如:

export ES_HEAP_SIZE=1G

将分配1GB。

编辑完脚本后,保存并退出,然后重新启动服务。运行以下命令可以检查是否正确设置:

ps aux | grep elasticsearch

并检查返回的 java 进程中的-Xms 和-Xmx 标志:

/usr/bin/java -Xms1G -Xmx1G

希望这对你有帮助:)

如果你使用 windows 服务器,你可以改变环境变量,重新启动服务器来应用新的环境值,并启动弹性服务。在 在 Windows 服务器中安装 Elastic中提供更多细节

对于任何希望在 Centos 7或其他运行 SystemD 的系统上执行此操作的人,请更改它

/etc/sysconfig/elasticsearch

取消 ES _ HEAP _ SIZE 行的注释,并设置一个值,例如:

# Heap Size (defaults to 256m min, 1g max)
ES_HEAP_SIZE=16g

(忽略关于1g max 的评论-这是默认值)

以前的答案在我的情况下是不够的,可能是因为我在 Debian8上,而他们被引用到一些以前的发行版。

Debian 8上修改通常放在 /usr/lib/systemd/system/elasticsearch.service中的服务脚本,并添加 Environment=ES_HEAP_SIZE=8G 就在“ Environment = *”的下面。

现在用 systemctl daemon-reload重新加载服务脚本并重新启动服务。工作应该完成了!

ubuntu 14.04的使用说明:

sudo vim /etc/init.d/elasticsearch

预备

ES_HEAP_SIZE=512m

然后进入:

sudo vim /etc/elasticsearch/elasticsearch.yml

套装:

bootstrap.memory_lock: true

文件中有更多信息的注释

在弹性搜索路径主目录中,即典型的 /usr/share/elasticsearch, 有一个配置文件 bin/elasticsearch.in.sh。 在此文件中编辑参数 ES_MIN_MEMES_MAX_MEM,分别修改 -Xms2g-Xmx4g。 并且请确保在此配置更改后重新启动了节点。

ElasticSearch > = 5的文档有 变了,这意味着上面的答案对我都不起作用。

我尝试在 /etc/default/elasticsearch/etc/init.d/elasticsearch中改变 ES_HEAP_SIZE,但当我运行 ps aux | grep elasticsearch时,输出仍然显示:

/usr/bin/java -Xms2g -Xmx2g # aka 2G min and max ram

我不得不在以下方面做出改变:

/etc/elasticsearch/jvm.options

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space


-Xms1g
-Xmx1g
# the settings shipped with ES 5 were: -Xms2g
# the settings shipped with ES 5 were: -Xmx2g

在 elasticsearch 2.x 中:

vi /etc/sysconfig/elasticsearch

转到代码块

# Heap size defaults to 256m min, 1g max
# Set ES_HEAP_SIZE to 50% of available RAM, but no more than 31g
#ES_HEAP_SIZE=2g

取消注释最后一行

ES_HEAP_SIZE=2g
  • Elasticsearch 将通过 Xms (最小堆大小)和 Xmx (最大堆大小)设置来分配 jvm.options 中指定的整个堆。
    • - Xmx12g
    • - Xmx12g
  • 将最小堆大小(Xms)和最大堆大小(Xmx)设置为彼此相等。
  • 不要将 Xmx 设置在 JVM 用于压缩对象指针(压缩的 Oops)的截止值之上,确切的截止值有所不同,但接近32GB。

  • 也可以通过环境变量设置堆的大小

    • ES _ JAVA _ OPTS = “-Xms2g-Xmx2g”./bin/elasticsearch
    • ES _ JAVA _ OPTS = “-Xms4000m-Xmx4000m”./bin/elasticsearch

更改堆大小的文件路径 /etc/elasticsearch/jvm.options

如果您正在使用 nano,那么请执行 sudo nano /etc/elasticsearch/jvm.options并相应地更新 -Xms-Xmx

(可以使用任何文件编辑器进行编辑)

enter image description here

/etc/elasticsearch/jvm.options.d中创建一个扩展名为 .options的新文件,并将选项放在其中,例如:

sudo nano /etc/elasticsearch/jvm.options.d/custom.options

并把内容放在那里:

# JVM Heap Size - see /etc/elasticsearch/jvm.options
-Xms2g
-Xmx2g

它会将堆的最大大小设置为2GB。不要忘记重新启动 elasticsearch:

sudo systemctl restart elasticsearch

现在你可以检查日志了:

sudo cat /var/log/elasticsearch/elasticsearch.log | grep "heap size"

你会看到这样的东西:

... heap size [2gb], compressed ordinary object pointers [true]

医生

更新路径 /etc/elasticsearch/jvm.options中的弹性配置

################################################################
## IMPORTANT: JVM heap size
################################################################
##
## The heap size is automatically configured by Elasticsearch
## based on the available memory in your system and the roles
## each node is configured to fulfill. If specifying heap is
## required, it should be done through a file in jvm.options.d,
## and the min and max should be set to the same value. For
## example, to set the heap to 4 GB, create a new file in the
## jvm.options.d directory containing these lines:
##
## -Xms4g
## -Xmx4g
##
## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
## for more information
##
################################################################
-Xms1g
-Xmx1g

这些配置意味着为 elasticsearch 服务分配1GB 内存。

窗口7弹性搜索 弹性搜索记忆问题 Elasticsearch-7.14.1 config jvm.options

加上这个
- Xms1g Xmx1g

Config elasticsearch.yml

无可奉告 Memory _ lock: true

和害虫 Https://github.com/elastic/elasticsearch-servicewrapper 下载服务档案及虫鼠 最后搜索 -7.14.1 bin

Bin elasticsearch.bat enter

如果您正在使用 docker-compose 来运行 ES 集群:

  • 打开 <your docker compose>.yml文件
  • 如果设置了 volumes属性,则不会丢失任何内容。否则,必须首先移动索引。
  • environment下查找这个值 ES_JAVA_OPTS并更改所有节点中的值,结果可能类似于 "ES_JAVA_OPTS=-Xms2g -Xmx2g"
  • 重建所有节点 docker-compose -f <your docker compose>.yml up -d

如果你使用 ubuntu 15.04 + 或者其他任何一个使用 systemd 的发行版,你可以设置最大内存大小编辑 elasticsearch systemd 服务并使用 ES _ HEAP _ sIZE 环境变量设置最大内存大小,我使用 ubuntu 20.04测试了它,它工作得很好:

systemctl edit elasticsearch

添加环境变量 ES _ HEAP _ SIZE 和所需的最大内存,这里是2GB 的示例:

[Service]
Environment=ES_HEAP_SIZE=2G

重新加载系统守护进程

systemd daemon-reload

然后重新启动弹性搜索

systemd restart elasticsearch

检查它是否按预期工作:

systemd status elasticsearch

你应该看到状态 -Xmx2G:

 CGroup: /system.slice/elasticsearch.service
└─2868 /usr/bin/java -Xms2G -Xmx2G

弹性搜索 7.x及以上,与 Ubuntu 20测试

  1. /etc/elasticsearch/jvm.options.d中创建一个文件。文件名必须以 .options结尾

    例如 heap_limit.options

  2. 将这些行添加到文件中

    ## Initial memory allocation
    
    
    -Xms1g
    
    
    ## Maximum memory allocation
    
    
    -Xmx1g
    
  3. 重新启动弹性搜索服务

    sudo service elasticsearch restart

    或者

    sudo systemctl restart elasticsearch

Centos 7和 Elasticsearch 7的 Oneliner (2g = 2GB)

$ echo $'-Xms2g\n-Xmx2g' > /etc/elasticsearch/jvm.options.d/2gb.options

然后

$ service elasticsearch restart