Docker for Mac で Elasticsearch を動かそうとして too many open files で2日くらいハマっています。
Elasticsearch はデータ入れるとめちゃくちゃfile descriptor 使って、too many open files
を吐かれて正常に動作しなくなります。
Caused by: java.nio.file.FileSystemException: /usr/share/elasticsearch/data/nodes/0/indices/BXAY4DSNTKqkAJsbiL0icQ/2/index/.es_temp_file: Too many open files in system
それで、 docker run するときに --ulimit="nofile=524288
のようにオプションをつければfile descriptor の上限を変えれるのでやってみました。
下記のようにelasticsearch のステータスを取得し、設定が反映されることを確認できました。
$ curl "localhost:9200/_nodes/stats/process" ... 略 "process": { "timestamp": 1554386415386, "open_file_descriptors": 10260, "max_file_descriptors": 524288, ... 略 }
これでいけるかと思ったのですが、open_file_descriptor が10260 あたりになると必ず too many open files のエラーを吐かれてそれ以上ファイルが開けなくなってしまいます。
ここでめちゃくちゃ試行錯誤した結果この記事にたどり着きました。
https://github.com/docker/for-mac/issues/2354
これによると docker for mac では volume されている場所での file descripor の上限は10217 あたりになってしまうとのことでした。これと全く同じ状況かと思われます。
--volume /path/to/data:/usr/share/elasticsearch/data
のようにvolume できないとなると、どうやってデータの永続化をすればよいのかわかりません。詰みました。という状況です。
なにか解決策はあるでしょうか...。
Dockerfile
1# https://github.com/elastic/elasticsearch-docker 2FROM docker.elastic.co/elasticsearch/elasticsearch-oss:6.7.0 3 4WORKDIR /app 5 6ADD . /app 7 8RUN elasticsearch-plugin install analysis-kuromoji
shell
1$ docker build -t es 2$ docker run -it -p 9200:9200 -v /path/to/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro -v /path/to/data:/usr/share/elasticsearch/data -e ES_JAVA_OPTS="-Xmx1g -Xms1g" --ulimit="nofile=524288" es
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/05 03:47 編集
2019/04/05 05:14
2019/04/06 07:15 編集