Elasticsearch JVM 堆内存使用率飙升,怎么办?
Posted 铭毅天下Elasticsearch
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch JVM 堆内存使用率飙升,怎么办?相关的知识,希望对你有一定的参考价值。
设置环境变量后 Elasticsearch 报告默认堆内存大小
【中文标题】设置环境变量后 Elasticsearch 报告默认堆内存大小【英文标题】:Elasticsearch reports default heap memory size after setting environment variable 【发布时间】:2015-01-23 13:39:30 【问题描述】:为了在 Windows 机器上增加 Elasticsearch 的 JVM 堆大小,我定义了以下环境变量:
ES_HEAP_SIZE=6g
(机器总共有12G RAM)。
我已经重启了 ES 并使用 _nodes/stat HTTP GET 命令查询了它的内存使用情况。但是,它似乎仍在使用 1GB:
内存:
heap_used_in_bytes: 1032367576,
heap_used_percent: 99,
heap_committed_in_bytes: 1037959168,
heap_max_in_bytes: 1037959168,
...
重启后ES不应该调整它的堆内存大小吗?
【问题讨论】:
【参考方案1】:来自running ES as a service on windows的注释:
请注意,安装期间可用的环境配置选项会被复制,并将在服务生命周期中使用。这意味着除非重新安装服务,否则安装后对它们所做的任何更改都不会生效。
如果您不想卸载并重新安装,可以使用服务管理器进行更改。运行>service manager
然后选择“Java”选项卡
更改内存池设置,点击“应用”并重新启动服务。
【讨论】:
这会覆盖任何以前配置的环境变量吗? 是的,原来配置的环境变量是用来初始配置服务的。通过在此处进行更改,这将覆盖所有环境变量。【参考方案2】:在我卸载并重新安装 Elasticsearch Windows 服务后,它正确地增加了 JVM 堆大小。只是重新启动它而不重新安装服务是行不通的。
【讨论】:
这成功了!我正在使用 Windows Server 2012 并且遇到了同样的问题(尽管我使用的是 ES_MIN_MEM 和 ES_MAX_MEM 环境变量 - 然后我添加了 ES_HEAP_SIZE 以进行良好的衡量)。我尝试重新启动(在新的管理员 Powershell 窗口中,以获取环境更改)无济于事。使用 ES_HOME\bin\service.bat stop/remove/install/start(以管理员身份)成功更改了内存分配。它必须在安装期间而不是在运行时获取环境变量。感谢您发布您自己的答案!【参考方案3】:对于弹性搜索 1.5
一种方法是编辑/bin/elasticsearch.in.sh
文件以默认为其他值,例如 1g。对于您的示例,将ES_MAX_MEM=1g
更改为ES_MAX_MEM=6g
。编辑完,重启 Elastic Search 应该就好了。
#!/bin/sh
ES_CLASSPATH=$ES_CLASSPATH:$ES_HOME/lib/elasticsearch-1.5.0.jar:$ES_HOME/lib/*:$ES_HOME/lib/sigar/*
if [ "x$ES_MIN_MEM" = "x" ]; then
ES_MIN_MEM=256m
fi
if [ "x$ES_MAX_MEM" = "x" ]; then
ES_MAX_MEM=6g
fi
if [ "x$ES_HEAP_SIZE" != "x" ]; then
ES_MIN_MEM=$ES_HEAP_SIZE
ES_MAX_MEM=$ES_HEAP_SIZE
fi
【讨论】:
@jasonrhasss 我在 /bin/elasticsearch.in.sh 中进行了修改,但它对弹性没有影响,但它仍然只使用 1g @RamRajVasavi 你是通过 yum 还是 apt-get 安装的?它可能正在使用不同的启动脚本。另外 - 您使用的是 1.5 版吗?【参考方案4】:为避免重新安装服务,您可以直接更改注册表中的值。它们有点难以找到:
当然,更改这些设置后,您必须重新启动服务。
【讨论】:
以上是关于Elasticsearch JVM 堆内存使用率飙升,怎么办?的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch JVM 堆内存使用率飙升,怎么办?