Amazon OpenSearch Service クラスターで Virtual Machine (JVM) のメモリ負荷が増加しているため、軽減したいと考えています。
簡単な説明
OpenSearch Service はデフォルトでは、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの RAM のうち 50% を JVM ヒープに割り当てます (最大 32 GiB)。JVM のメモリ負荷は、クラスターノード内の Java ヒープの割合を示します。
JVM メモリ負荷の増加は、次のシナリオで発生する可能性があります。
- クラスターに対するリクエスト数の急増
- クエリ内の集計、ワイルドカード、長大な時間範囲
- ノード間の不均衡なシャード割り当て、クラスター内のシャード数過剰
- フィールドデータまたはインデックスマッピングの制御不能な急増
- インバウンド負荷に対処できない Amazon EC2 インスタンスタイプ
解決策
データ内のパターンを監視する
JVM メモリ負荷の増加を解決するには、クラスターへのトラフィックを削減します。
クラスターに関連するノードレベルの統計情報を取得し、メモリ負荷または過剰なガベージコレクションが発生するノードを特定するには、次のコマンドを実行します。
GET _nodes/stats/jvm
問題があるリクエストの特定を進めるには、スローログを有効にします。詳細については、OpenSearch のウェブサイトで「シャードのスローログ」を参照してください。JVM のメモリ負荷が 90% 未満であることを確認します。スロークエリに関する詳細については、Elasticsearch のウェブサイトで「高度な調整:Elasticsearchでのスロークエリの発見と修正」を参照してください。
Amazon CloudWatch を使用すると、JVM のメモリ消費とガベージコレクションの動作を経時的に監視できます。この情報を参考にパターンを検出し、クラスターが不安定化する前に措置を講じます。さらに、CloudWatch アラームを構成し、JVM のメモリ高負荷をプロアクティブに検出、解決します。
キャッシュ設定を確認する
フィールドデータキャッシュをクリアするには、次のクエリを実行します。
POST /index_name/_cache/clear?fielddata=true
注: キャッシュをクリアすると、進行中のクエリが中断される可能性があります。
JVM サーキットブレーカーを超過しており、メモリ消費が未対策の場合、JVM OutOfMemoryError が発生します。この問題を解決するには、構成の要件に基づき、親サーキットブレーカーのフィールドデータキャッシュ割り当て、リクエストサーキットブレーカーの設定のいずれかを変更します。クラスターレベルでこれらの設定を変更する方法については、OpenSearch のウェブサイトで「Cluster Settings API」を参照してください。
構成を最適化する
構成の最適化には、次のベストプラクティスを実施します。
JVM のメモリ高負荷をトラブルシューティングする方法については、「OpenSearch Service ノードがクラッシュする原因を教えてください」を参照してください。
JVM のメモリ高負荷がもたらす影響を把握する
次の各シナリオは、OpenSearch Service が複数の JVM メモリ負荷率を処理する仕組みを示しています。
- JVM のメモリ負荷率が 75% に達すると、x86 インスタンスタイプでは、Amazon OpenSearch Service は Concurrent Mark Sweep (CMS) ガベージコレクターを開始します。ARM ベースの Graviton インスタンスタイプは、Garbage-First (G1) ガベージコレクターを使用しており、追加の短期中断やヒープのデフラグを行います。
注: ガベージコレクションは、CPU 負荷が高いプロセスです。メモリ使用量が継続して増加すると、"ClusterBlockException" や "JVM OutOfMemoryError" エラーが発生し、その他のクラスターのパフォーマンスに関連する問題が起こる可能性があります。
- JVM のメモリ負荷率が 30 分にわたり 92% を上回る場合、OpenSearch Service はすべての書き込み操作をブロックします。
- JVM のメモリ負荷率が 100% に達すると、OpenSearch Service は終了します。その結果インスタンスが再起動し、"OutOfMemory (OOM)" エラーメッセージが表示されます。
関連情報
OpenSearch Service のトラブルシューティング
OpenSearch Service の開始方法: 必要なシャード数を把握する」