如何更改Elasticsearch最大内存大小


99

我有一台默认配置为Elasticsearch的Apache服务器,除默认配置的最大大小为1GB之外,其他一切工作正常。

我没有太多的文档要存储在Elasticsearch中,因此我想减少内存。

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

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

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

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

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


什么操作系统和版本?Elasticsearch版本?您是如何安装Elasticsearch的?
James Addison

1
您可能希望减少副本和分片的数量,因为在1节点设置中没有副本和分片的好处,请将其添加到/etc/elasticsearch/elasticsearch.yaml: index.number_of_shards: 1 index.number_of_replicas: 0 这样一来,您无需进行不必要的工作即可节省内存和cpu 。
neo112 '16

Answers:


127

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

3
对于Mac OS 10.12上的Elasticsearch 5.2,我在/usr/local/opt/elasticsearch/libexec/config/jvm.options
victorpolko

1
我可以确认这适用于aws ami实例(已安装RPM),但是首先在/ etc / sysconfig / elasticsearch和bootstrap.memory_lock中设置MAX_LOCKED_MEMORY = unlimited:在/etc/elasticsearch/elasticsearch.yml中为true
mork

2
这并不工作在Windows -正确答案就在这里:stackoverflow.com/questions/28798845/...
CBP

4
对于自制安装,文件在这里:/usr/local/etc/elasticsearch/jvm.options
Milovan Zogovic

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,可能适用于更高版本和其他发行版/ OS。(编辑:这也适用于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

4
看起来不错 对于确定ES_HEAP_SIZE应该是什么,我也有以下建议:经验法则是ElasticSearch堆应具有计算机上约50%的可用内存。ElasticSearch大量使用系统缓存,因此您应为它们保留足够的内存。(摘自asquera.de/opensource/2012/11/25/…)–
汤姆

17
在CentOS中,我看到您提到的配置/etc/default位于“ / etc / sysconfig”下
Nishant 2014年

5
在CentOS上/etc/sysconfig/elasticsearch是进行这些更改的适当位置。RPM甚至还在那里提供该文件的默认版本。
slm 2015年

5
这不再适用于Elasticsearch 5,您需要此答案
tirdadc

2
这看起来不错,但是我在/etc/security/limits.d/elasticsearch.conf
radtek上

26

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

/etc/sysconfig/elasticsearch 

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

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

(忽略有关最大1g的评论-这是默认设置)


我应该补充一点:我在CentOS 7的ES 1.7上尝试了上述方法,但没有效果
Jonesome Reinstate Monica 2015年

1
@Jonesome不确定我的建议-我正在CentOS 7上的ES RPM软件包中运行ES 1.7.1,这就是该文件所在的路径,更改ES_HEAP_SIZE可以按预期工作。

9

说明ubuntu 14.04

sudo vim /etc/init.d/elasticsearch

ES_HEAP_SIZE=512m

然后在:

sudo vim /etc/elasticsearch/elasticsearch.yml

组:

bootstrap.memory_lock: true

文件中有注释以获取更多信息


9

在我的情况下,以前的答案是不够的,可能是因为我使用的是Debian 8,而以前的发行版中却提到了这些答案。

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

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


1
谢谢,您保存我的一天!是的,这是Debian 8的正确程序
fast2b 16-4-25

除了更改文件之外,没有其他地方可以配置此文件/usr/吗?
MartinSchröder17年

6

如果您使用位于https://github.com/elasticsearch/elasticsearch-servicewrapper上的 Elasticsearch的Github存储库中提供的服务包装器,则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。


2
如果您根本没有任何服务怎么办?(即只运行bin / elasticsearch -d)
亨利·邱


@HenleyChiu然后只需设置ES_HEAP_SIZE环境变量,然后再运行它。即export ES_HEAP_SIZE=1G; bin/elasticsearch -d
Andrey Regentov

在ES 1.7.x股票elasticsearch.conf(由rpm在CentOS上安装的文件)中,根本没有set.default。这种方法在ES 1.7上适用吗?
Jonesome恢复Monica 2015年

上面的答案是误导的。在/ etc / sysconfig / elasticsearch中设置ES_HEAP_SIZE
Jonesome恢复状态Monica 2015年

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是您要分配的MB / GB RAM数)

例:

export ES_HEAP_SIZE=1G

将分配1GB。

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

ps aux | grep elasticsearch

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

/usr/bin/java -Xms1G -Xmx1G

希望这可以帮助 :)


1
不要这样子。这不是进行此类更改的好地方。这是一个巨大的hack!可能有效,但是每当ES更新时,它都可能被废弃。
slm 2015年

1
我应该补充:我在CentOS 7的ES 1.7上尝试了上述方法,但没有效果。
Jonesome恢复Monica 2015年

3
  • 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

同样不超过物理RAM的50%
Achi Even-dar

嗨,我如何设置这样的环境变量。变量名是ES_JAVA_OPTS,值是:“-Xms2g -Xmx2g”。/bin / elasticsearch喜欢
Manikandan

另外我如何确认,堆大小正确更新
Manikandan

2

在elasticsearch path主目录中,即通常/usr/share/elasticsearch有一个配置文件bin/elasticsearch.in.sh。编辑参数ES_MIN_MEMES_MAX_MEM在这个文件中的变化-Xms2g-Xmx4g分别。并且请确保您在此配置更改后已重新启动节点。



1

在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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.