Tair (Redis OSS-compatible) インスタンスのメモリアラートがメモリ使用量が多いことを示している場合、またはアプリケーションでメモリ不足 (OOM) 例外が発生したが、パフォーマンスモニタリングデータがメモリ使用量が少ないことを示している場合は、このトピックを参照して問題のトラブルシューティングを行います。
問題の内容
症状1:
インスタンスのメモリアラートが表示され、メモリ使用量がしきい値を超えたことを示します。 例えば、平均値は、3回連続して90% 以上である。 ただし、コンソールのモニタリングページには、メモリ使用量がしきい値よりも大幅に低いことが表示されます。
症状2:
アプリケーションでは、command not allowed when used memory > 'maxmemory'
例外が発生しますが、コンソールのモニタリングページには、メモリが完全に占有されていないか、1つのデータノードのみが高メモリ使用率であることが表示されます。
発生原因
監視されたメモリ使用量が報告されたメモリ使用量と異なるのはなぜですか。
モニタリングページに表示されるメモリ使用量がアラート情報のメモリ使用量と異なる場合、インスタンスはクラスターインスタンスである可能性があります。 データノードレベルではなく、インスタンスレベルでモニタリング情報を確認しています。
受信したアラート情報のインスタンス詳細にnodeId = <Instance ID>-db-<Number>
が含まれているかどうかを確認します。 上記の条件がtrueの場合、<インスタンスID>-db-<番号>
で識別されるデータノードのメモリ使用量のみがしきい値を超えています。
次の手順を実行して、データノードのメモリ使用量がアラート情報のメモリ使用量と同じかどうかを確認します。
コンソールにログインし、[インスタンス] ページに移動します。 上部のナビゲーションバーで、管理するインスタンスが存在するリージョンを選択します。 次に、インスタンスを見つけて、インスタンスIDをクリックします。
左側のナビゲーションウィンドウで、パフォーマンスモニタリング.
データノード タブをクリックし、
<インスタンスID>-db-<番号>
に対応するデータノードを選択します。 データノードのメモリ使用量がアラート情報のメモリ使用量と同じかどうかを確認します。
データノードのメモリ使用量が他のデータノードのメモリ使用量よりも大幅に多いのはなぜですか。
クラスタインスタンス内の1つ以上のデータノードのメモリ使用量が他のデータノードと比較して大幅に高い場合、データスキューが発生する可能性があります。 インスタンス診断機能を使用して、現在のインスタンスでデータスキューが発生しているかどうかを確認できます。
メモリスキューが発生するのはなぜですか?
ほとんどの場合、メモリスキューは次の理由で発生します。
大きなキーが存在します。
クラスタインスタンスは、巡回冗長検査 (CRC) アルゴリズムを使用して、キーが属するスロットを計算し、スロットが属するデータノードにデータを書き込む。
特定のキーがかなりの数のフィールドまたはサイズの大きいフィールドを格納する場合、キーが異なるデータノードにわたって均等に分散されていても、キーが過度に大きくなり、メモリスキューを引き起こす可能性がある。
ハッシュタグが使用されます。
user:{1000}:name
などのハッシュタグを使用する場合、インスタンスは中括弧で囲まれた文字列に対してCRC計算を実行し、同じハッシュタグを持つキーを同じスロットにマッピングします。 このように、キーは同じデータノード上に存在する。 多数のキーに対して同一のハッシュタグを構成すると、1つのデータノードにデータが集中し、メモリスキューが発生する可能性があります。
ソリューション
大きなキーが存在するかどうかを確認し、大きなキーを分割
大きなキーの識別
オフラインキー分析機能を使用して、大きなキーを識別できます。 詳細については、「オフラインキー分析機能の使用」をご参照ください。
大きなキーを識別する方法については、「大きなキーとホットキーの識別と処理」をご参照ください。
分割大きなキー
たとえば、数万のメンバーを含むHASHキーを、適切な数のメンバーを持つ複数のHASHキーに分割できます。 クラスターインスタンスの場合、大きなキーを分割して、複数のデータシャード間でメモリ使用量のバランスを取ることができます。
ハッシュタグが使用されているかどうかの確認
ハッシュタグを使用する場合は、ビジネス要件に基づいてハッシュタグを複数のハッシュタグに分割することを検討してください。 このようにして、データは異なるデータノードにわたって均等に分散される。
インスタンス仕様のアップグレード
各シャードに割り当てられるメモリを増やしてインスタンス仕様をアップグレードすることは、メモリスキューを防ぐための一時的な解決策として役立ちます。 詳細については、「インスタンスの設定の変更」をご参照ください。
インスタンス仕様の変更中にデータスキューの事前チェックが開始されます。 選択したインスタンスタイプがデータスキューの問題を処理できない場合、システムはエラーを報告します。 仕様の高いインスタンスタイプを選択して、もう一度お試しください。
インスタンス仕様をアップグレードすると、メモリ使用量のスキューが緩和される可能性があります。 しかしながら、スキューは、帯域幅およびCPUリソース上でも発生し得る。