如何更改Elasticsearch最大内存大小

Pat*_*980 93 elasticsearch

我有一个默认配置为Elasticsearch的Apache服务器,除了默认配置的最大大小为1GB外,一切都运行良好.

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

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

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

bin/ElasticSearch -Xmx=2G -Xms=2G
Run Code Online (Sandbox Code Playgroud)

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

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

Big*_*Ron 123

ElasticSearch> = 5中,文档已更改,这意味着上述答案都不适用于我.

我试图改变ES_HEAP_SIZE/etc/default/elasticsearchetc/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
Run Code Online (Sandbox Code Playgroud)

  • 对于Mac OS 10.12上的Elasticsearch 5.2,我在`/ usr/local/opt/elasticsearch/libexec/config/jvm.options中找到了这个文件. (3认同)
  • 对于自制安装,文件位于:`/ usr/local/etc/elasticsearch/jvm.options` (3认同)
  • 这在Windows中不起作用 - 正确的答案在这里:/sf/ask/2015919181/ (2认同)

Jam*_*son 116

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/limits.conf:

elasticsearch - nofile 65535
elasticsearch - memlock unlimited
Run Code Online (Sandbox Code Playgroud)

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

ES_HEAP_SIZE=512m
MAX_OPEN_FILES=65535
MAX_LOCKED_MEMORY=unlimited
Run Code Online (Sandbox Code Playgroud)

/etc/elasticsearch/elasticsearch.yml:

bootstrap.mlockall: true
Run Code Online (Sandbox Code Playgroud)

  • 在CentOS中,我看到你在`/ etc/default`下提到的配置位于`/ etc/sysconfig'下 (17认同)
  • 这不再适用于Elasticsearch 5,您需要这个[答案](http://stackoverflow.com/a/40333263/3102766). (5认同)
  • 这看起来不错.我还有关于确定ES_HEAP_SIZE应该是什么的以下建议:经验法则是ElasticSearch堆应该拥有机器上大约50%的可用内存.ElasticSearch大量使用系统缓存,因此您应该为它们留下足够的内存.(来自http://asquera.de/opensource/2012/11/25/elasticsearch-pre-flight-checklist/) (4认同)
  • 在CentOS`/etc/sysconfig/elasticsearch`是进行这些更改的合适位置.RPM甚至也提供此文件的默认版本. (4认同)
  • 这看起来不错,但我在`/ etc/security/limits.d/elasticsearch.conf中专门为elasticsearch用户设置了限制. (2认同)

小智 26

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

/etc/sysconfig/elasticsearch 
Run Code Online (Sandbox Code Playgroud)

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

# Heap Size (defaults to 256m min, 1g max)
ES_HEAP_SIZE=16g
Run Code Online (Sandbox Code Playgroud)

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


小智 9

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

Debian 8上修改通常放置的服务脚本/usr/lib/systemd/system/elasticsearch.service,并添加Environment=ES_HEAP_SIZE=8G 在其他"Environment =*"行下面.

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


sur*_*190 9

说明ubuntu 14.04:

sudo vim /etc/init.d/elasticsearch

ES_HEAP_SIZE=512m

然后在:

sudo vim /etc/elasticsearch/elasticsearch.yml

组:

bootstrap.memory_lock: true

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


Sco*_*ice 6

如果您使用Elasticsearch的Github存储库中提供的服务包装器(位于https://github.com/elasticsearch/elasticsearch-servicewrapper),则elasticsearch-servicewrapper/service/elasticsearch.conf中的conf文件将控制内存设置.在elasticsearch.conf的顶部是一个参数:

set.default.ES_HEAP_SIZE=1024
Run Code Online (Sandbox Code Playgroud)

只需减小此参数,例如"set.default.ES_HEAP_SIZE = 512",即可减少Elasticsearch的分配内存.

请注意,如果使用elasticsearch-wrapper,elasticsearch.conf中提供的ES_HEAP_SIZE会覆盖所有其他设置.这让我有点想弄清楚,因为从文档中看来,堆内存似乎可以从elasticsearch.yml设置.

如果您的服务包装器设置在其他地方设置,例如在James的示例中的/ etc/default/elasticsearch,那么在那里设置ES_HEAP_SIZE.

  • 如果你根本没有任何服务怎么办?(即只运行bin/elasticsearch -d) (2认同)

小智 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
Run Code Online (Sandbox Code Playgroud)

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

export ES_HEAP_SIZE=xM/xG
Run Code Online (Sandbox Code Playgroud)

(其中x是您要分配的MB/GB RAM数)

例:

export ES_HEAP_SIZE=1G
Run Code Online (Sandbox Code Playgroud)

将分配1GB.

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

ps aux | grep elasticsearch
Run Code Online (Sandbox Code Playgroud)

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

/usr/bin/java -Xms1G -Xmx1G
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 :)


小智 6

    \n
  • Elasticsearch 将通过 Xms(最小堆大小)和 Xmx(最大堆大小)设置分配 jvm.options 中指定的整个堆。\n\n
      \n
    • -Xmx12g
    • \n
    • -Xmx12g
    • \n
  • \n
  • 将最小堆大小 (Xms) 和最大堆大小 (Xmx) 设置为彼此相等。
  • \n
  • Don\xe2\x80\x99t 将 Xmx 设置为高于 JVM 用于压缩对象指针(压缩 oops)的截止值,确切的截止值有所不同,但接近 32 GB。

    \n\n

  • \n
  • 还可以通过环境变量设置堆大小

    \n\n
      \n
    • ES_JAVA_OPTS="-Xms2g -Xmx2g" ./bin/elasticsearch
    • \n
    • ES_JAVA_OPTS="-Xms4000m -Xmx4000m" ./bin/elasticsearch
    • \n
  • \n
\n

  • 也不超过物理 RAM 的 50% (2认同)

Its*_*wal 6

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

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

(您可以使用任何文件编辑器来编辑它)

在此输入图像描述


Far*_*and 6

创建具有扩展名的新文件.options/etc/elasticsearch/jvm.options.d,并把该选项那里。例如:

sudo nano /etc/elasticsearch/jvm.options.d/custom.options
Run Code Online (Sandbox Code Playgroud)

并将内容放在那里:

# JVM Heap Size - see /etc/elasticsearch/jvm.options
-Xms2g
-Xmx2g
Run Code Online (Sandbox Code Playgroud)

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

sudo systemctl restart elasticsearch
Run Code Online (Sandbox Code Playgroud)

现在您可以检查日志:

sudo cat /var/log/elasticsearch/elasticsearch.log | grep "heap size"
Run Code Online (Sandbox Code Playgroud)

你会看到类似这样的东西:

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

文件

  • 感谢提及“.options”文件名,这不在文档中,因此对我有用,现在是了。谢谢 ! (3认同)