Azure Cache for Redis のサーバー側の問題に関するトラブルシューティング
このセクションでは、Azure Cache for Redis またはそれをホストしている仮想マシンに関する条件が原因で発生する問題のトラブルシューティングについて説明します。
Note
このガイドのトラブルシューティング手順のいくつかには、Redis コマンドを実行し、さまざまなパフォーマンス メトリックを監視する手順が含まれています。 詳細および手順については、「 追加情報 」セクションの記事を参照してください。
サーバーの負荷が高い
サーバーの負荷が高い場合、Redis サーバーはビジー状態になり、要求に遅れずに対応できないため、タイムアウトになります。 左側の [リソース] メニューから [監視] を選択して、キャッシュに関する [サーバーの負荷] メトリックを検査します。 [サーバーの負荷] グラフは、作業ウィンドウの [洞察] の下にあります。 あるいは、[サーバーの負荷] に設定されたメトリックを [メトリック] の下に追加します。
サーバーの負荷が高い場合に考慮する必要があるオプションを次に示します。
スケールアップまたはスケールアウト
複数の Redis プロセスに負荷が分散されるように、スケールアウトしてさらにシャードを追加します。 また、より多くの CPU コアを使用して、より大きなキャッシュサイズにスケールアップすることを検討してください。 詳細については、「Azure Cache for Redis 計画に関するよくあるご質問」を参照してください。
クライアント接続数の急激な変化
詳細については、「クライアント接続のスパイクを回避する」を参照してください。
長期実行または高コストのコマンド
このセクションは移動しました。 詳細については、長期実行コマンドに関する記事を参照してください。
Scaling
スケーリング操作は、ノード間のデータの移動やクラスター トポロジの変更に関連する可能性があるため、CPU とメモリを集中的に消費します。 詳細については、「スケーリング」を参照してください。
サーバー メンテナンス
Azure Cache for Redis がフェールオーバーを経験すると、ダウンしたノードからのすべてのクライアント接続が、引き続き実行中のノードに転送されます。 接続が増加したため、サーバーの負荷が急増する可能性があります。 クライアント アプリケーションの再起動を試みて、すべてのクライアント接続が再作成されて 2 つのノード間で再配布されるようにすることができます。
メモリ使用量が多い
サーバーのメモリ不足が原因で、さまざまなパフォーマンスの問題が発生して要求の処理が遅延する可能性があります。 メモリ不足が発生すると、システムによってデータがディスクにページングされ、システムの処理速度が大幅に低下します。
メモリ不足の原因として考えられるものを以下にいくつか示します。
- キャッシュに、その最大容量に近いデータが格納されている
- Redis サーバーでメモリの断片化が大量に発生している
負荷パターンが格納しているデータのサイズの変動が大きいとき、断片化が発生する可能性があります。 たとえば、データが 1 KB と 1 MB のサイズに分散されているとき、断片化が発生する可能性があります。 1 KB のキーが既存のメモリから削除されたとき、1 MB のキーをそこに収められないことで断片化が生じます。 同様に、1 MB のキーが削除されて 1.5 MB のキーが追加された場合、既存の再利用されているメモリに収めることができません。 これにより使用されない空きメモリが生じて、断片化が増えます。
used_memory_rss
値が used_memory
メトリックの 1.5 倍より大きい場合、メモリに断片化があります。 断片化が原因で問題が生じるのは次のようなときです。
- メモリ使用量がキャッシュの最大メモリ制限に近い。または
UsedMemory_RSS
が最大メモリ制限を超えていて、メモリでページ フォールトが発生する可能性がある。
キャッシュが断片化されていて大きなメモリ負荷で実行されている場合、システムはフェールオーバーを実行して RSS (Resident Set Size) メモリを回復しようとします。
Redis が 2 つの統計、used_memory
と used_memory_rss
を公開する際に使用する INFO コマンドは、この問題を特定するのに役立ちます。 ポータルを使用してこれらのメトリックを表示できます。
maxmemory-reserved
と maxfragmentationmemory-reserved
の値が適切に設定されていることを検証してください。
メモリ使用量を正常な状態に保つために実行できる、可能性のあるいくつかの変更を次に示します。
- メモリ ポリシーを構成 し、キーに有効期限を設定します。 断片化が発生している場合、このポリシーでは十分でない可能性があります。
- maxmemory-reserved 値を構成 します。
- 潜在的な影響について早期に通知される、使用済みメモリなどのメトリックに関するアラートを作成します。
- メモリ容量の多いより大きいキャッシュ サイズにスケーリングします。 詳細については、「Azure Cache for Redis 計画に関するよくあるご質問」を参照してください。
メモリ管理に関するおすすめ候補については、「メモリ管理」のベストプラクティスを参照してください。
実行時間の長いコマンド
このセクションは移動しました。 詳細については、長期実行コマンドに関する記事を参照してください。
サーバー側の帯域幅の制限
このセクションは移動しました。 詳細については、ネットワーク帯域幅の制限に関する記事を参照してください。