如何更改Elasticsearch最大内存大小

时间:2013-08-08 17:52:53

标签: elasticsearch

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

我没有在Elasticsearch中存储如此大量的文档,所以我想减少内存。

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

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

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

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

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

13 个答案:

答案 0 :(得分:116)

2016年11月24日更新:Elasticsearch 5显然已经改变了配置JVM的方式。 See this answer here。以下答案仍适用于版本< 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/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

答案 1 :(得分:115)

ElasticSearch&gt; = 5 中,文档有changed,这意味着上述答案都不适合我。

我尝试更改ES_HEAP_SIZE/etc/default/elasticsearch中的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

答案 2 :(得分:25)

对于想要在Centos 7或运行SystemD的其他系统上执行此操作的任何人,您可以在

中进行更改
# Heap Size (defaults to 256m min, 1g max)
ES_HEAP_SIZE=16g

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

{{1}}

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

答案 3 :(得分:9)

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

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

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

答案 4 :(得分:9)

sudo vim /etc/init.d/elasticsearch的说明:

ES_HEAP_SIZE=512m

sudo vim /etc/elasticsearch/elasticsearch.yml

然后在:

bootstrap.memory_lock: true

集:

<ol> <form action="finished.php" method="post"> <li><input type="text" name="data['color3']"></li> <li><input type="text" name="data['color4']"></li> </form> </ol>

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

答案 5 :(得分:7)

如果您使用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。

答案 6 :(得分: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

希望这会有所帮助:)

答案 7 :(得分:2)

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

答案 8 :(得分:2)

  • 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

答案 9 :(得分:2)

.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]

Doc

答案 10 :(得分:1)

如果您使用Windows服务器,则可以更改环境变量,重新启动服务器以应用新的环境值并启动弹性服务。 Install Elastic in Windows Server

中的更多细节

答案 11 :(得分:1)

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

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

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

enter image description here

答案 12 :(得分:0)

更新路径 /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。