LoginSignup
21
19

More than 5 years have passed since last update.

メモリ制限下でElasticsearch5のDockerコンテナを立ち上げる

Last updated at Posted at 2017-06-10

要約

Elasticsearch5の公式イメージからDockerコンテナを立ち上げようとすると、メモリが少ないと立ち上がらない。
以下のように、ES_JAVA_OPTSでJava VMのヒープサイズを指定してあげると良い。

# (例)メモリ1250M・Javaのヒープサイズ400Mの場合
docker run -m 1250m -e "ES_JAVA_OPTS=-Xms400m -Xmx400m" elasticsearch:5.3.2

詳細

メモリ1250MでElasticsearch5のイメージを立ち上げようとすると、
エラーメッセージを吐かずに落ちる。
docker run -m 1250m elasticsearch:5.3.2

docker inspectで調べると、ステータスコード137で落ちている模様、、

ファイルディスクリプタ数の上限を指定する

elasticsearchは大量のファイルディスクリプタを消費するので、まずはファイルディスクリプタ数の上限を指定してみる。
デフォルトでは64Kだそうなので、半分の32K・さらに半分の16Kで試してみるがうまくいかない。
docker run -m 1250m --ulimit nofile=32000:32000
docker run -m 1250m --ulimit nofile=16000:16000

コンテナのメモリ上限を上げてみる

ではメモリの問題かと考え、コンテナのメモリ上限を上げて試してみると、立ち上げに成功。今回はメモリに制限があることが前提の環境だったので、工夫してみる。
docker run -m 3000m elasticsearch:5.3.2

ES_HEAP_SIZEを指定

ぐぐると、ES_HEAP_SIZEという環境変数でJava VMのヒープサイズ上限を指定できる模様。早速やってみる。
https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html を見ると、メモリの半分以下が推奨されているので、とりあえず400Mにしておく。

docker run -m 1250m -e "ES_HEAP_SIZE=400m" elasticsearch:5.3.2

するとこんなエラーが。環境変数の名前が変わったよ、というエラーのようだ。

Error: encountered environment variables that are no longer supported
Use jvm.options or ES_JAVA_OPTS to configure the JVM
ES_HEAP_SIZE=400m: set -Xms400m and -Xmx400m in jvm.options or add "-Xms400m -Xmx400m" to ES_JAVA_OPTS

ES_JAVA_OPTSを指定

エラーメッセージのままに、環境変数の指定を変えて再チャレンジ。

docker run -m 1250m -e "ES_JAVA_OPTS=-Xms400m -Xmx400m" elasticsearch:5.3.2

立ち上がった!

最後に

けっこう苦労したのだが、ちゃんと公式のリファレンスに書いてありました、、Elasticの製品は、リファレンスがきっちりしていて良いですね。
https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html

21
19
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
19