高度な設定

高度な設定を変更することは一般的に推奨されず、パフォーマンスや安定性に悪影響を及ぼす可能性があります。ほとんどの状況では、Elasticsearchが提供するデフォルトを使用することを推奨します。

JVMオプションの設定

必要に応じて、カスタムオプションファイル(推奨)を追加するか、ES_JAVA_OPTS環境変数を設定することで、デフォルトのJVMオプションを上書きできます。

JVMオプションファイルは、.optionsというサフィックスを持ち、JVM引数の改行区切りリストを含む必要があります。JVMはオプションファイルを辞書順で処理します。

JVMオプションファイルの配置場所は、インストールの種類によって異なります:

  • tar.gzまたは.zip:カスタムJVMオプションファイルをconfig/jvm.options.d/に追加します。
  • DebianまたはRPM:カスタムJVMオプションファイルを/etc/elasticsearch/jvm.options.d/に追加します。
  • Docker:カスタムJVMオプションファイルを/usr/share/elasticsearch/config/jvm.options.d/にバインドマウントします。

ルートjvm.optionsファイルを変更しないでください。代わりにjvm.options.d/内のファイルを使用してください。

JVMオプションの構文

JVMオプションファイルには、改行区切りのJVM引数のリストが含まれています。引数の前にはダッシュ(-)が付いています。特定のバージョンに設定を適用するには、バージョンまたはバージョンの範囲の前にコロンを付けて追加します。

  • すべてのバージョンに設定を適用する:

テキスト

  1. -Xmx2g
  • 特定のバージョンに設定を適用する:

テキスト

  1. 17:-Xmx2g
  • バージョンの範囲に設定を適用する:

テキスト

  1. 17-18:-Xmx2g

特定のバージョンとその後のバージョンに設定を適用するには、範囲の上限を省略します。たとえば、この設定はJava 8以降に適用されます:

テキスト

  1. 17-:-Xmx2g

空白行は無視されます。#で始まる行はコメントとして扱われ、無視されます。コメントアウトされていない行で、無効なJVM引数として認識されない行は拒否され、Elasticsearchは起動に失敗します。

環境変数を使用してJVMオプションを設定する

本番環境では、JVMオプションファイルを使用してデフォルト設定を上書きします。テストおよび開発環境では、ES_JAVA_OPTS環境変数を通じてJVMオプションを設定することもできます。

  1. export ES_JAVA_OPTS="$ES_JAVA_OPTS -Djava.io.tmpdir=/path/to/temp/dir"
  2. ./bin/elasticsearch

RPMまたはDebianパッケージを使用している場合は、システム構成ファイルES_JAVA_OPTSを指定できます。

ElasticsearchはJAVA_TOOL_OPTIONSおよびJAVA_OPTS環境変数を無視します。

JVMヒープサイズの設定

デフォルトでは、Elasticsearchはノードの役割と総メモリに基づいてJVMヒープサイズを自動的に設定します。ほとんどの本番環境ではデフォルトのサイズを使用することを推奨します。

デフォルトのヒープサイズを上書きするには、最小および最大ヒープサイズ設定、XmsおよびXmxを設定します。最小値と最大値は同じでなければなりません。

ヒープサイズは利用可能なRAMに基づくべきです:

  • XmsおよびXmxを総メモリの50%を超えないように設定します。ElasticsearchはJVMヒープ以外の目的にもメモリを必要とします。たとえば、Elasticsearchは効率的なネットワーク通信のためにオフヒープバッファを使用し、ファイルへの効率的なアクセスのためにオペレーティングシステムのファイルシステムキャッシュに依存します。JVM自体もいくつかのメモリを必要とします。ElasticsearchがXmx設定で構成された制限よりも多くのメモリを使用するのは正常です。
    コンテナ内で実行している場合、たとえばDockerでは、総メモリはコンテナに見えるメモリの量として定義され、ホストの総システムメモリではありません。
  • XmsおよびXmxを圧縮通常オブジェクトポインタ(oops)の閾値を超えないように設定します。正確な閾値は異なりますが、26GBはほとんどのシステムで安全であり、一部のシステムでは30GBまで大きくできます。閾値を下回っていることを確認するには、Elasticsearchログで次のようなエントリを確認してください:

テキスト

  1. heap size [1.9gb], compressed ordinary object pointers [true]

または、ノード情報APIを使用してノードのjvm.using_compressed_ordinary_object_pointers値を確認します:

Python

  1. resp = client.nodes.info(
  2. node_id="_all",
  3. metric="jvm",
  4. )
  5. print(resp)

Ruby

  1. response = client.nodes.info(
  2. node_id: '_all',
  3. metric: 'jvm'
  4. )
  5. puts response

Js

  1. const response = await client.nodes.info({
  2. node_id: "_all",
  3. metric: "jvm",
  4. });
  5. console.log(response);

コンソール

  1. GET _nodes/_all/jvm

Elasticsearchに利用可能なヒープが多いほど、内部キャッシュに使用できるメモリが増えます。これにより、オペレーティングシステムがファイルシステムキャッシュに使用できるメモリが減ります。大きなヒープは、より長いガベージコレクションの一時停止を引き起こす可能性もあります。

ヒープサイズを構成するには、XmsおよびXmx JVM引数を拡張子.optionsのカスタムJVMオプションファイルに追加し、jvm.options.d/ディレクトリに保存します。たとえば、最大ヒープサイズを2GBに設定するには、XmsおよびXmxの両方を2gに設定します:

テキスト

  1. -Xms2g
  2. -Xmx2g

テスト用に、ES_JAVA_OPTS環境変数を使用してヒープサイズを設定することもできます:

  1. ES_JAVA_OPTS="-Xms2g -Xmx2g" ./bin/elasticsearch

ES_JAVA_OPTS変数は他のすべてのJVMオプションを上書きします。生産環境でのES_JAVA_OPTSの使用は推奨しません。

ElasticsearchをWindowsサービスとして実行している場合は、サービスマネージャを使用してヒープサイズを変更できます。WindowsでElasticsearchをサービスとしてインストールおよび実行するを参照してください。

Elasticsearch TCPレディネスポートの有効化

この機能は技術プレビュー中であり、将来のリリースで変更または削除される可能性があります。Elasticは問題を修正するために取り組みますが、技術プレビューの機能は公式GA機能のサポートSLAの対象ではありません。

構成されている場合、ノードは準備状態のときにTCPポートを開くことができます。ノードはクラスタに正常に参加したときに準備が整ったと見なされます。単一ノード構成では、ノードはリクエストを受け入れることができるときに準備が整ったと見なされます。

レディネスTCPポートを有効にするには、readiness.port設定を使用します。レディネスサービスはすべてのホストアドレスにバインドされます。

ノードがクラスタを離れるか、シャットダウンAPIを使用してノードをシャットダウンのためにマークすると、レディネスポートは直ちに閉じられます。

レディネスTCPポートへの接続が成功すると、Elasticsearchノードが準備完了であることを示します。クライアントがレディネスポートに接続すると、サーバーは単にソケット接続を終了します。クライアントにデータは送信されません。クライアントがレディネスポートに接続できない場合、ノードは準備が整っていません。