高度な設定
高度な設定を変更することは一般的に推奨されず、パフォーマンスや安定性に悪影響を及ぼす可能性があります。ほとんどの状況では、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引数のリストが含まれています。引数の前にはダッシュ(-
)が付いています。特定のバージョンに設定を適用するには、バージョンまたはバージョンの範囲の前にコロンを付けて追加します。
- すべてのバージョンに設定を適用する:
テキスト
-Xmx2g
- 特定のバージョンに設定を適用する:
テキスト
17:-Xmx2g
- バージョンの範囲に設定を適用する:
テキスト
17-18:-Xmx2g
特定のバージョンとその後のバージョンに設定を適用するには、範囲の上限を省略します。たとえば、この設定はJava 8以降に適用されます:
テキスト
17-:-Xmx2g
空白行は無視されます。#
で始まる行はコメントとして扱われ、無視されます。コメントアウトされていない行で、無効なJVM引数として認識されない行は拒否され、Elasticsearchは起動に失敗します。
環境変数を使用してJVMオプションを設定する
本番環境では、JVMオプションファイルを使用してデフォルト設定を上書きします。テストおよび開発環境では、ES_JAVA_OPTS
環境変数を通じてJVMオプションを設定することもできます。
export ES_JAVA_OPTS="$ES_JAVA_OPTS -Djava.io.tmpdir=/path/to/temp/dir"
./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ログで次のようなエントリを確認してください:
テキスト
heap size [1.9gb], compressed ordinary object pointers [true]
または、ノード情報APIを使用してノードのjvm.using_compressed_ordinary_object_pointers
値を確認します:
Python
resp = client.nodes.info(
node_id="_all",
metric="jvm",
)
print(resp)
Ruby
response = client.nodes.info(
node_id: '_all',
metric: 'jvm'
)
puts response
Js
const response = await client.nodes.info({
node_id: "_all",
metric: "jvm",
});
console.log(response);
コンソール
GET _nodes/_all/jvm
Elasticsearchに利用可能なヒープが多いほど、内部キャッシュに使用できるメモリが増えます。これにより、オペレーティングシステムがファイルシステムキャッシュに使用できるメモリが減ります。大きなヒープは、より長いガベージコレクションの一時停止を引き起こす可能性もあります。
ヒープサイズを構成するには、Xms
およびXmx
JVM引数を拡張子.options
のカスタムJVMオプションファイルに追加し、jvm.options.d/
ディレクトリに保存します。たとえば、最大ヒープサイズを2GBに設定するには、Xms
およびXmx
の両方を2g
に設定します:
テキスト
-Xms2g
-Xmx2g
テスト用に、ES_JAVA_OPTS
環境変数を使用してヒープサイズを設定することもできます:
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ノードが準備完了であることを示します。クライアントがレディネスポートに接続すると、サーバーは単にソケット接続を終了します。クライアントにデータは送信されません。クライアントがレディネスポートに接続できない場合、ノードは準備が整っていません。