122

我有一个默认配置为 Elasticsearch 的 Apache 服务器,一切正常,除了默认配置的最大大小为 1GB。

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

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

我已经看到我可以执行此操作:

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

但是当我必须重新启动 Elasticsearch 时,这将丢失。

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

4

18 回答 18

150

ElasticSearch >= 5中,文档已更改,这意味着上述答案均不适合我。

我尝试更改ES_HEAP_SIZEin/etc/default/elasticsearch和 in /etc/init.d/elasticsearch,但是当我运行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
于 2016-10-30T20:23:51.250 回答
117

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

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


当我想知道内存和 ES 时,我有一个 pastebin 页面与其他人分享。它对我来说没问题: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/limits.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
于 2013-08-09T18:07:29.293 回答
28

对于希望在 Centos 7 或其他运行 SystemD 的系统上执行此操作的人,您可以将其更改为

/etc/sysconfig/elasticsearch 

取消注释 ES_HEAP_SIZE 行,并设置一个值,例如:

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

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

于 2015-05-12T06:54:41.970 回答
14

说明ubuntu 14.04

sudo vim /etc/init.d/elasticsearch

ES_HEAP_SIZE=512m

然后在:

sudo vim /etc/elasticsearch/elasticsearch.yml

放:

bootstrap.memory_lock: true

文件中有评论以获取更多信息

于 2016-09-17T12:24:57.447 回答
11

创建一个带有扩展名的新文件并将选项.options放在/etc/elasticsearch/jvm.options.d那里。例如:

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]

文档

于 2021-05-29T11:47:05.283 回答
10

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

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

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

于 2015-08-23T23:20:33.713 回答
6

如果您使用 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 设置堆内存。

如果您的服务包装器设置设置在其他位置,例如 James 示例中的 /etc/default/elasticsearch,则在此处设置 ES_HEAP_SIZE。

于 2013-08-13T12:36:56.697 回答
6

如果您使用提供的 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 是您要分配的 RAM 的 MB/GB 数)

例子:

export ES_HEAP_SIZE=1G

将分配 1GB。

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

ps aux | grep elasticsearch

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

/usr/bin/java -Xms1G -Xmx1G

希望这可以帮助 :)

于 2015-04-01T11:41:59.327 回答
6
  • Elasticsearch 将通过 Xms(最小堆大小)和 Xmx(最大堆大小)设置分配 jvm.options 中指定的整个堆。
    • -Xmx12g
    • -Xmx12g
  • 将最小堆大小 (Xms) 和最大堆大小 (Xmx) 设置为彼此相等。
  • 不要将 Xmx 设置为高于 JVM 用于压缩对象指针(压缩 oops)的截止值,确切的截止值会有所不同,但接近 32 GB。

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

    • ES_JAVA_OPTS="-Xms2g -Xmx2g" ./bin/elasticsearch
    • ES_JAVA_OPTS="-Xms4000m -Xmx4000m" ./bin/elasticsearch
于 2018-09-29T00:15:59.163 回答
5

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

如果您使用的是 nano,请执行相应sudo nano /etc/elasticsearch/jvm.options的更新。-Xms-Xmx

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

在此处输入图像描述

于 2021-04-06T11:30:58.567 回答
3

在elasticsearch path home dir ie 通常/usr/share/elasticsearch,有一个配置文件bin/elasticsearch.in.sh。编辑参数ES_MIN_MEM,在此文件中分别ES_MAX_MEM更改。并且请确保在此配置更改后您已重新启动节点。-Xms2g-Xmx4g

于 2016-10-24T04:00:20.260 回答
1

如果您使用 windows 服务器,您可以更改环境变量,重新启动服务器以应用新的环境值并启动弹性服务。在 Windows Server中安装 Elastic 中的更多详细信息

于 2015-04-15T03:07:33.747 回答
1

更新路径中的弹性配置/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 RAM。

于 2021-08-01T14:53:59.207 回答
1

在弹性搜索 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
于 2018-02-26T11:11:18.760 回答
0

Elastic Search7.x及更高版本,经过测试Ubuntu 20

  1. /etc/elasticsearch/jvm.options.d. 文件名必须以.options

    例如heap_limit.options

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

    -Xms1g # 初始内存分配

    -Xmx1g # 最大内存分配

  3. 重启弹性搜索服务

    sudo service elasticsearch restart

    或者

    sudo systemctl restart elasticsearch

于 2022-03-04T14:38:48.740 回答
0

如果你使用 docker-compose 运行 ES 集群:

  • 打开<your docker compose>.yml文件
  • 如果你设置了volumes属性,你不会失去任何东西。否则,您必须先移动索引。
  • ES_JAVA_OPTS在下查找此值environment并更改所有节点中的值,结果可能类似于"ES_JAVA_OPTS=-Xms2g -Xmx2g"
  • 重建所有节点docker-compose -f <your docker compose>.yml up -d
于 2021-11-02T22:31:51.750 回答
0

如果您使用 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 守护进程

systemd daemon-reload

然后重启elasticsearch

systemd restart elasticsearch

要检查它是否按预期工作:

systemd status elasticsearch

您应该在状态中看到-Xmx2G

 CGroup: /system.slice/elasticsearch.service
         └─2868 /usr/bin/java -Xms2G -Xmx2G
于 2022-01-05T20:51:03.257 回答
0

窗口 7 elasticsearch 弹性搜索内存问题 elasticsearch-7.14.1\config\jvm.options

添加这个
-Xms1g -Xmx1g

elasticsearch-7.14.1\config\elasticsearch.yml

取消注释 bootstrap.memory_lock: true

和害虫 https://github.com/elastic/elasticsearch-servicewrapper 下载服务文件和害虫 lasticsearch-7.14.1\bin

bin\elasticsearch.bat 输入

于 2021-09-16T17:25:54.323 回答