Docker が elasticsearch を起動するときのメモリ不足の問題と解決策

Docker が elasticsearch を起動するときのメモリ不足の問題と解決策

質問

Docker が elasticsearch をインストールして起動するときにメモリが不足する

システム centos8 (Alibaba Cloud ecs サーバー)

[root@iZ2zeczvvb79boy368xppwZ ~]# cat /etc/redhat-release
CentOS Linux リリース 8.1.1911 (コア)

インストールプロセス

docker pull elasticsearch:6.4.0

仮想マシンのメモリを変更する(効果はないようです)

sysctl -w vm.max_map_count=262144

docker runコマンドを使用してコンテナを実行します。

docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \
-e "discovery.type=シングルノード" \
-e "cluster.name=elasticsearch" \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-d エラスティックサーチ:6.4.0

Docker psはコンテナが起動していないことを示している

[root@iZ2zeczvvb79boy368xppwZ ~]# docker ps
コンテナID イメージ コマンド 作成ステータス ポート名
edfc400862eb rabbitmq:3.7.15 "docker-entrypoint.s..." 14 時間前 14 時間前にアップ 0.0.0.0:4369->4369/tcp、0.0.0.0:5671-5672->5671-5672/tcp、0.0.0.0:15671-15672->15671-15672/tcp、0.0.0.0:25672->25672/tcp rabbitmq
2ae2f3f8dc1f nginx:1.10 "nginx -g 'daemon of..." 2 週間前 2 週間前 0.0.0.0:80->80/tcp, 443/tcp nginx
164e4e7561df redis:3.2 "docker-entrypoint.s..." 2 週間前 2 週間前 0.0.0.0:6379->6379/tcp redis
eeabe57f1f21 mysql:5.7 "docker-entrypoint.s…" 2 週間前 2 週間前 0.0.0.0:3306->3306/tcp, 33060/tcp mysql

docker ps -a を実行してコンテナが作成されたことを確認します

[root@iZ2zeczvvb79boy368xppwZ ~]# docker ps -a
コンテナID イメージ コマンド 作成ステータス ポート名
767829ae1d7c elasticsearch:6.4.0 "/usr/local/bin/dock…" 約 1 分前 終了しました (1) 約 1 分前 elasticsearch
edfc400862eb rabbitmq:3.7.15 "docker-entrypoint.s..." 14 時間前 14 時間前にアップ 0.0.0.0:4369->4369/tcp、0.0.0.0:5671-5672->5671-5672/tcp、0.0.0.0:15671-15672->15671-15672/tcp、0.0.0.0:25672->25672/tcp rabbitmq
2ae2f3f8dc1f nginx:1.10 "nginx -g 'daemon of..." 2 週間前 2 週間前 0.0.0.0:80->80/tcp, 443/tcp nginx
164e4e7561df redis:3.2 "docker-entrypoint.s..." 2 週間前 2 週間前 0.0.0.0:6379->6379/tcp redis
eeabe57f1f21 mysql:5.7 "docker-entrypoint.s…" 2 週間前 2 週間前 0.0.0.0:3306->3306/tcp, 33060/tcp mysql

ログを確認します。docker logs -f elasticsearchコマンドを実行してログを確認し、jvm メモリが不足していることを確認します。

[root@iZ2zeczvvb79boy368xppwZ ~]# docker ログ -f elasticsearch
OpenJDK 64 ビット サーバー VM の警告: オプション UseConcMarkSweepGC はバージョン 9.0 で非推奨となり、将来のリリースで削除される可能性があります。
OpenJDK 64 ビット サーバー VM 警告: INFO: os::commit_memory(0x00007ebf15330000, 549668585472, 0) が失敗しました。エラー = '十分なスペースがありません' (errno = 12)
#
# Java Runtime Environment を続行するにはメモリが不足しています。
# ネイティブ メモリ割り当て (mmap) は、予約済みメモリをコミットするための 549668585472 バイトのマップに失敗しました。
# 詳細情報を含むエラー レポート ファイルは次のように保存されます。
# ログ/hs_err_pid1.log

回避策

jvm.options ファイルの構成を変更する まず、jvm.options ファイルの場所を見つけます (各サーバーの場所は異なる場合があります)

[root@iZ2zeczvvb79boy368xppwZ ~]# find / -name jvm.options
/var/lib/docker/overlay2/d399872a3517b4d4acb0d2f70d0625c0f38251ffe5819a1cea00f8213de3e7f5/diff/usr/share/elasticsearch/config/jvm.options

vimはファイルを入力して仮想マシンの最小メモリを変更します

[root@iZ2zeczvvb79boy368xppwZ ~]# vim /var/lib/docker/overlay2/d399872a3517b4d4acb0d2f70d0625c0f38251ffe5819a1cea00f8213de3e7f5/diff/usr/share/elasticsearch/config/jvm.options

-Xms プロパティを見つけて 512m に変更します (私の elasticsearch:6.4.0 のデフォルトは 1g です)

## JVM 構成

################################################################
## 重要: JVM ヒープサイズ
################################################################
##
## 常に最小および最大のJVMヒープを設定する必要があります
## サイズを同じ値に設定します。たとえば、
## ヒープを 4 GB に設定するには、次のように設定します。
##
## -Xms4g
## -Xmx4g
##
## https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html を参照してください
## 詳細は
##
################################################################

# Xmsはヒープスペース全体の初期サイズを表します
# Xmxはヒープスペース全体の最大サイズを表します

-Xms512m
-Xmx512m

保存して終了

vim では、i を押して編集モードに入り、ESC を押して編集モードを終了し、: を押してコマンド モードに入り、下部のコマンド ラインに w と入力して保存し、q と入力して終了し、q! と入力して強制終了します。
コンテナを再度起動し、docker ps を実行してコンテナが正常に起動したかどうかを確認します。

[root@iZ2zeczvvb79boy368xppwZ ~]# docker ps
コンテナID イメージ コマンド 作成ステータス ポート名
f5c4ed61196b elasticsearch:6.4.0 "/usr/local/bin/dock…" 15 分前 15 分前にアップ 0.0.0.0:9200->9200/tcp、0.0.0.0:9300->9300/tcp elasticsearch
edfc400862eb rabbitmq:3.7.15 "docker-entrypoint.s..." 15 時間前 15 時間前にアップ 0.0.0.0:4369->4369/tcp、0.0.0.0:5671-5672->5671-5672/tcp、0.0.0.0:15671-15672->15671-15672/tcp、0.0.0.0:25672->25672/tcp rabbitmq
2ae2f3f8dc1f nginx:1.10 "nginx -g 'daemon of..." 2 週間前 2 週間前 0.0.0.0:80->80/tcp, 443/tcp nginx
164e4e7561df redis:3.2 "docker-entrypoint.s..." 2 週間前 2 週間前 0.0.0.0:6379->6379/tcp redis
eeabe57f1f21 mysql:5.7 "docker-entrypoint.s…" 2 週間前 2 週間前 0.0.0.0:3306->3306/tcp, 33060/tcp mysql

要約する

これで、docker が elasticsearch を起動するときにメモリ不足になる問題と解決策に関するこの記事は終わりです。docker が elasticsearch を起動するときにメモリ不足になる問題に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • JDKバージョンの問題によりElasticsearchが起動に失敗する問題を解決する
  • Dockerはelasticsearchイメージを起動し、ディレクトリをマウントした後にエラーを解決します
  • DockerがElasticsearch7.xを起動してエラーを報告する問題を解決する
  • elasticsearch 起動時の警告: JVM メモリをロックできません
  • Elasticsearch は guice を通じてノードアセンブリの起動プロセスを挿入します

<<:  フロントエンドフレームワーク Vue における親子コンポーネントデータの双方向バインディングの実装

>>:  MySQLは集計関数を使用して単一のテーブルをクエリします

推薦する

CentOS 7 パスワードを忘れた場合の解決プロセス図

必要Windows システムでも Linux システムでも、さまざまな理由でパスワードを忘れてしまう...

Vue3 カプセル化された虫眼鏡コンポーネントのサンプルコード

目次コンポーネントインフラストラクチャ目的: 画像拡大鏡機能を実現するvueuseをインストールする...

IE6はmin-widthを実装している

まず第一に、この効果は古い話題であるはずだということはわかっています。今日ファイルを整理していたら、...

setup+ref+reactive は vue3 の応答性を実装します

セットアップは、結合された API を記述するために使用されます。テンプレートが使用できるようにする...

Linux システムに Zookeeper サービスをインストールする方法

1. /usr/local/services/zookeeper フォルダを作成します。 mkdir...

クリックナンバーゲームを実装するネイティブJS

参考までに、クリックナンバーゲームをネイティブJSで実装しました。具体的な内容は以下のとおりです。最...

Linuxにgitをインストールする方法

1. はじめにGit は、規模の大小を問わずあらゆるプロジェクトを俊敏かつ効率的に処理するために使用...

設定ファイルを書いてMyBatisを簡単に使う方法

設定ファイルを書いてMyBatisを簡単に使う方法マイバティス3.xここでは MyBatis につい...

JavaScriptでカレンダー効果を素早く実装

この記事では、カレンダー効果を素早く実現するためのJavaScriptの具体的なコードを例として紹介...

CSS3 は下部に固定されたフッターを実装します (ページの高さに関係なく常に下部にあります)

序文フッター領域を下部に固定します。ページの高さや幅に関係なく、モバイル メニューと同様に、フッター...

Vue+video.jsはビデオプレイリストを実装します

この記事では、ビデオプレイリストを実装するためのvue + video.jsの具体的なコードを参考ま...

開発をスピードアップできる VueUse ライブラリ 5 つ (まとめ)

目次VueUse にはどのようなユーティリティがありますか? VueUseをVueプロジェクトにイン...

React 入門レベルの詳細なメモ

目次1. Reactの基本的な理解1. はじめに2. Reactの特徴3. Reactが効率的な理由...

Mysql はテーブル内の古いデータを定期的にクリアし、いくつかのデータを保持します (推奨)

以下の目標を達成するため: Mysql データベースは、一定の間隔 (2 時間または 1 日、カスタ...

Mysql ALTER TABLE はフィールドを追加するときにテーブルをロックしますか?

目次MySQL 5.6以前MySQL 5.6以降要約する知らせMySQL 5.6以前更新手順元のテー...