2016-05-23

Elastic SearchでToo many open filesが出た時の対処法

アイドルEFKスタックが止まっていたので、{elastic search path}/logsディレクトリ内のログを確認したところ、以下のようなエラーが発生してました。

[logstash-2016.05.20][[logstash-2016.05.20][0]] IndexShardRecoveryException
[failed to recovery from gateway]; nested: EngineCreationFailureException
[failed to create engine]; nested: FileSystemException[/home/hoge/elasticsearch
/data/elasticsearch/nodes/0/indices/logstash-2016.05.20/0/translog/translog-89.ckp:
 Too many open files];

...

Caused by: [logstash-2016.05.20][[logstash-2016.05.20][0]] EngineCreationFailureException
[failed to create engine]; nested: FileSystemException[/home/hoge/elasticsearch/data
/elasticsearch/nodes/0/indices/logstash-2016.05.20/0/translog/translog-89.ckp: 
Too many open files];

Too many open filesということでファイルディスクリプタが枯渇してそうだったので、以下のコマンドで確認(rootで)

$ ls -la /proc/`ps aux | grep elasticsearch | \
head -1 | awk '{ print $2 }'`/fd | wc -l

> 4095

ということで枯渇してました。リミットはこんな感じでした。

$ cat /proc/`ps aux | grep elasticsearch | \
head -1 | awk '{ print $2 }'`/limits | grep open

> Max open files  4096  4096  files

ということで、ファイルディスクリプタの制限を解除します。ElasticSearchの推奨値は32Kから64Kとなっているので65536を設定。

#/etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
root soft nofile 65536
root hard nofile 65536

あとはrebootすればOK。今回はElasticSearchをsupervisordで動かしていましたが、その場合はroot側の設定が効くようです。

参考URL

このエントリーをはてなブックマークに追加