ご利用の Tair (Redis OSS-compatible) インスタンスでメモリ使用量高騰のアラートを受信した場合、またはアプリケーションでメモリ不足 (OOM) エラーが発生したにもかかわらず、パフォーマンスモニタリングに表示されるメモリ使用量が低い場合、このトピックではその考えられる原因とソリューションについて説明します。
症状
症状 1:
インスタンスのメモリアラートで、メモリ使用量がしきい値を超えた (例:3 回連続の測定で平均値が 90% 以上) ことが示されているにもかかわらず、コンソールの [パフォーマンスモニタリング] ページでは全体のメモリ使用量が低い。
症状 2:
アプリケーションから command not allowed when used memory > 'maxmemory' エラーが返されるが、[パフォーマンスモニタリング] ページでは、全体のメモリが枯渇していない、または単一のデータノードのみメモリ使用量が高いことが示されている。
原因
モニタリングとアラートの差異
パフォーマンスモニタリングでのメモリ使用量とメモリアラートの間に差異が生じるのは、クラスターインスタンスを使用している場合に起こり得ます。アラートは単一のデータノードのメトリックを反映していることが多いのに対し、ユーザーが表示しているのはインスタンス全体のメトリックであるためです。
受信したアラートの詳細を確認してください。アラートに nodeId = <Instance ID>-db-<Number> というフィールドが含まれている場合、<Instance ID>-db-<Number> で識別される特定のデータノードのみがメモリのしきい値を超えたことを示します。
以下の手順に従って、データノードのメモリ使用量がアラートと一致することを確認します。
コンソールにログインし、[インスタンス] ページに移動します。上部のナビゲーションバーで、管理するインスタンスが存在するリージョンを選択します。次に、対象のインスタンスを見つけてインスタンス ID をクリックします。
-
左側のナビゲーションウィンドウで、[パフォーマンスモニタリング] をクリックします。
-
データノード タブをクリックし、
<Instance ID>-db-<Number>に対応するデータノードを選択します。そのメモリ使用量がアラートの値と一致するかどうかを確認します。選択したデータノードの [CPU 使用率] と [メモリ使用量] のモニタリングチャートを表示できます。
データノード間のメモリの偏り
クラスターインスタンス内の 1 つ以上のデータノードのメモリ使用量が他のノードよりも著しく高い場合、それはメモリの偏りを示しています。 インスタンス診断機能を使用すると、ご利用のインスタンスに偏りの問題がないか迅速に確認できます。
メモリの偏りの原因
メモリの偏りの主な原因は次のとおりです。
-
ラージキーの存在。
クラスターインスタンスは、巡回冗長検査 (CRC) アルゴリズムを使用して、キーがどのスロットに属するかを計算し、対応するデータシャードにデータを書き込みます。
キーがデータシャード間で均等に分散されていても、多すぎる、または大きすぎるフィールドを格納する単一のキーがラージキーとなり、メモリの偏りを引き起こす可能性があります。
-
ハッシュタグの使用。
user:{1000}:nameのようにハッシュタグが使用されると、インスタンスは中括弧 ({}) 内の文字列に対して CRC 計算を実行します。同じハッシュタグを持つキーは同じスロットにマッピングされ、同じデータシャードに格納されます。多数のキーが同じハッシュタグを共有すると、データが単一のデータシャードに集中し、メモリの偏りを引き起こします。
ソリューション
ラージキーの確認と分割
ラージキーの検出
オフラインキー分析機能を使用して、ラージキーを検出します。
ラージキーを検出する他の方法については、「ラージキーとホットキー」をご参照ください。
ラージキーの分割
例えば、数万のメンバーを持つ HASH キーを、それぞれが適切な数のメンバーを持つ複数のより小さな HASH キーに分割します。クラスターインスタンスでは、ラージキーを分割することで、データシャード間のメモリ使用量のバランスを大幅に改善できます。
ハッシュタグ使用状況の確認
データ集中を引き起こすハッシュタグを使用している場合は、アプリケーションロジックに従って複数のハッシュタグに分割することを検討してください。これにより、データを異なるデータシャードに、より均等に分散させることができます。
インスタンス仕様のアップグレード
インスタンス仕様をアップグレードすると、各シャードで利用可能なメモリが増加し、メモリの偏りに対する一時的なソリューションとなり得ます。詳細な手順については、「インスタンス構成の変更」をご参照ください。
インスタンス仕様の変更中に、システムはデータスキューの事前チェックを開始します。選択したインスタンスタイプがデータスキューの問題を処理できない場合、システムはエラーを報告します。より高い仕様のインスタンスタイプを選択して、再度お試しください。
インスタンス仕様をアップグレードした後、メモリ使用量の偏りは緩和される可能性があります。ただし、帯域幅や CPU リソースでも偏りが発生する可能性があります。