検索ブログ

主に検索のことについて書いています。

Elasticsearchのファイルディスクリプタチェック

Elasticsearchのファイルディスクリプタチェックについて記す。

公式ドキュメント File descriptor check と File Descriptors を参考にした。 www.elastic.co

www.elastic.co

検証環境: Elasticsearch 6.0.0-rc1

これはLinuxおよびmacOSにのみ関連する問題であり、Windows上でElasticsearchを実行している場合は無視しても問題ない。

Elasticsearchは多数のファイルを使用するためElasticsearchを実行しているユーザーのopen files descriptorを65,536以上にしたほうがよい。

.zipパッケージと.tar.gzパッケージについては、Elasticsearchを起動する前にrootとしてulimit -n 65536を設定するか /etc/security/limits.confのnofileに65536を設定する。(これは試してみたが/etc/security/にlimits.confが見当たらなかった)

macOSではJVMオプション -XX:-MaxFDLimit Elasticsearchでより高いファイルディスクリプタを設定する必要がある。 これも試してみたがエラーがでてしまいよくわからなかった。elasticsearchとメイン・クラスElasticsearchって指すところが違うのかな: (

bash-3.2$ ls
elasticsearch           elasticsearch-plugin        elasticsearch-translog
elasticsearch-env       elasticsearch-plugin.bat    elasticsearch-translog.bat
elasticsearch-env.bat       elasticsearch-service-mgr.exe   elasticsearch.bat
elasticsearch-keystore      elasticsearch-service-x64.exe
elasticsearch-keystore.bat  elasticsearch-service.bat
bash-3.2$ pwd
/Users/sakura818uuu/elasticsearch-6.0.0-rc1/bin
bash-3.2$ java -XX:-MaxFDLimit Elasticsearch 
エラー: メイン・クラスElasticsearchが見つからなかったかロードできませんでした

RPMパッケージとDebianパッケージは、既にファイルディスクリプタの最大数が65536にデフォルト設定されており、それ以上の設定は必要ない。

以下のクエリは Nodes Stats API を使用して各ノードごとのmax_file_descriptorsを確認できるものである。

bash-3.2$ curl -XGET 'localhost:9200/_nodes/stats/process?filter_path=**.max_file_descriptors&pretty'
{
  "nodes" : {
    "Xj840__ASbS0BbEVHYQBFQ" : {
      "process" : {
        "max_file_descriptors" : 10240
      }
    }
  }
}