Elasticsearch 容器启动时遇到了 137 错误,无法正常运行
首先
由于以下错误,无法在elasticsearch中启动docker容器,因此要寻找原因和解决方法。
elasticsearch exited with code 137
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.1.1
expose:
- 9200
ports:
- "9200:9200"
- "9300:9300"
tty: true
environment:
discovery.type: single-node
错误代码137是指…
根据OOM(内存不足)问题,容器似乎被SIGKILL终止了。
关于OOM状态的处理,可以先检查节点的内核日志。
journalctl -k | grep -i -e memory -e oom
# 実行結果
Out of memory: Kill process 19824 (java) score 116 or sacrifice child
可以查看箱子的详细信息或者是下落的容器
docker inspect <container ID>
限制内存上限
请查看以下地址,这里有关于公式的参考资料:https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
起動時和最大堆大小是由物理内存决定的。
建议将起动时和最大堆大小设置为物理内存的50%以下。
需要使用比由Xmx设置所限制的更多内存来监视Elasticsearch进程。
那么,看看自己的环境中有多少物理内存。
free -m
# 実行結果
total used free shared buff/cache available
Mem: 7803 5325 536 163 1940 1816
Swap: 4095 2221 1874
只要不超过1GB,似乎可以将其分配给Elasticsearch容器。
只需要进行一次性设置,就可以通过设置ES_JAVA_OPTS环境变量来指定实际启动堆大小和最大堆大小。
在进行详细讨论之前,我们先对堆区进行简要复习。
堆内存
有广阔的土地区域
-
- new領域(短命なオブジェクト)
-
- old領域(長生きオブジェクト)
- permanent領域(クラスを保持する)
另外,在新领域中,有三个区域——eden、from、to。当eden区域满时,会将对象移动到from或to区域。而且,移动次数较多的对象会被移动到old区域。
个体寿命周期
在清理堆区的垃圾回收机制中,大致分为两种类型。
-
- Scavenge GC(NEW領域のみを対象とした短時間で終了するガベージ・コレクションであり、頻繁に実施)
- Full GC(NEWとOLD両方の領域を対象とした大がかりなガベージ・コレクションであり、比較的低い頻度で実施)
(参考: https://www.atmarkit.co.jp/ait/articles/0504/02/news005_2.html)
请参阅此网址获取更多信息。
回到题目,限制堆区域。
使用 ES_JAVA_OPTS 分别将 Xms 和 Xmx 设置为 500MB。
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.1.1
expose:
- 9200
ports:
- "9200:9200"
- "9300:9300"
tty: true
environment:
discovery.type: single-node
ES_JAVA_OPTS: -Xms500m -Xmx500m
当看一看实际的内存使用量是否减少。
ps aux | grep elastic
# 実行結果
1000 115726 1.2 16.6 4803048 1329072 pts/0 Ssl+ 13:51 7:01 /usr/share/elasticsearch/jdk/bin/java -Xms1g -Xmx1g ・・・ override=/ -Xms1g -Xmx1g ・・・
ps aux | grep elastic
# 実行結果
1000 27147 231 9.4 3789796 753308 pts/0 Ssl+ 23:41 0:23 /usr/share/elasticsearch/jdk/bin/java -Xms1g -Xmx1g ・・・ override=/ -Xm500m -Xmx500m ・・・
变更后,可以看到Xms和Xmx的值已被覆盖,而变更前的内存使用率从16.6%降至9.4%!现在不会再因OOM而崩溃了!
让我们开始编程 Elasticsearch 吧!