Azure Cache for Redis のサーバー側の問題に関するトラブルシューティングTroubleshoot Azure Cache for Redis server-side issues

このセクションでは、Azure Cache for Redis またはそれがホストされている仮想マシンの状態が原因で発生する問題のトラブルシューティングについて説明します。This section discusses troubleshooting issues that occur because of a condition on an Azure Cache for Redis or the virtual machine(s) hosting it.

注意

このガイドのトラブルシューティング手順のいくつかには、Redis コマンドを実行し、さまざまなパフォーマンス メトリックを監視する手順が含まれています。Several of the troubleshooting steps in this guide include instructions to run Redis commands and monitor various performance metrics. 詳細および手順については、「 追加情報 」セクションの記事を参照してください。For more information and instructions, see the articles in the Additional information section.

Redis サーバーでのメモリ不足Memory pressure on Redis server

サーバー側のメモリ不足により、要求処理を遅らせる可能性があるあらゆる種類のパフォーマンス問題が発生します。Memory pressure on the server side leads to all kinds of performance problems that can delay processing of requests. メモリ不足になると、システムはデータをディスクにページングする可能性があります。When memory pressure hits, the system may page data to disk. この ページ フォールト により、システムの処理速度が大幅に低下します。This page faulting causes the system to slow down significantly. このメモリ不足の原因として考えられるものをいくつか以下に示します。There are several possible causes of this memory pressure:

  • キャッシュに、その最大容量に近いデータが格納されている。The cache is filled with data near its maximum capacity.
  • Redis でメモリの断片化が大量に発生している。Redis is seeing high memory fragmentation. Redis は小さいオブジェクト用に最適化されているため、この断片化は、大きいオブジェクトを格納することによって最も頻繁に発生します。This fragmentation is most often caused by storing large objects since Redis is optimized for small objects.

Redis は、INFO コマンドを通して、この問題を識別するために役立つ "used_memory" と "used_memory_rss" という 2 つの統計を公開しています。Redis exposes two stats through the INFO command that can help you identify this issue: "used_memory" and "used_memory_rss". ポータルを使用してこれらのメトリックを表示できます。You can view these metrics using the portal.

メモリ使用量を正常な状態に保つために実行できる、可能性のあるいくつかの変更を次に示します。There are several possible changes you can make to help keep memory usage healthy:

  • メモリ ポリシーを構成 し、キーに有効期限を設定します。Configure a memory policy and set expiration times on your keys. 断片化が発生している場合、このポリシーでは十分でない可能性があります。This policy may not be sufficient if you have fragmentation.
  • maxmemory-reserved 値を構成 します。Configure a maxmemory-reserved value that is large enough to compensate for memory fragmentation.
  • 大きいキャッシュ オブジェクトをより小さい関連オブジェクトに分割します。Break up your large cached objects into smaller related objects.
  • 潜在的な影響について早期に通知される、使用済みメモリなどのメトリックに関するアラートを作成します。Create alerts on metrics like used memory to be notified early about potential impacts.
  • メモリ容量の多いより大きいキャッシュ サイズにスケーリングします。Scale to a larger cache size with more memory capacity.

高い CPU 使用率またはサーバーの負荷High CPU usage or server load

高いサーバーの負荷または CPU 使用率は、サーバーが適切なタイミングで要求を処理できないことを示します。A high server load or CPU usage means the server can't process requests in a timely fashion. サーバーは応答が遅くなり、要求レートについていけない可能性があります。The server may be slow to respond and unable to keep up with request rates.

CPU またはサーバーの負荷などのメトリックを監視します。Monitor metrics such as CPU or server load. タイムアウトに対応する CPU 使用率が急激に増えていないか監視します。Watch for spikes in CPU usage that correspond with timeouts.

高いサーバーの負荷を軽減するために実行できるいくつかの変更を次に示します。There are several changes you can make to mitigate high server load:

  • 以下に示す実行時間の長いコマンドや深刻なメモリ不足によるページ フォールトなどの、CPU スパイクの原因を調査します。Investigate what is causing CPU spikes such as long-running commands noted below or page faulting because of high memory pressure.
  • 潜在的な影響について早期に通知される、CPU または サーバーの負荷などのメトリックに関するアラートを作成します。Create alerts on metrics like CPU or server load to be notified early about potential impacts.
  • CPU 容量の多いより大きいキャッシュ サイズにスケーリングします。Scale to a larger cache size with more CPU capacity.

実行時間の長いコマンドLong-running commands

Redis コマンドの中には、他のコマンドより実行コストが高いものがあります。Some Redis commands are more expensive to execute than others. Redis コマンドのドキュメントは、各コマンドの時間複雑度を示しています。The Redis commands documentation shows the time complexity of each command. Redis コマンドの処理はシングルスレッドで行われるため、コマンドの実行時間が長いと、それより後に実行される他のコマンドはすべてブロックされます。Because Redis command processing is single-threaded, a command that takes time to run will block all others that come after it. Redis サーバーに対して発行しているコマンドを確認し、パフォーマンスへの影響を理解する必要があります。You should review the commands that you're issuing to your Redis server to understand their performance impacts. たとえば、KEYS コマンドは多くの場合、それが O(N) 操作であることを認識せずに使用されます。For instance, the KEYS command is often used without knowing that it's an O(N) operation. SCAN を使用して KEYS を回避することにより CPU スパイクを削減できます。You can avoid KEYS by using SCAN to reduce CPU spikes.

SLOWLOG コマンドを使用すると、サーバーに対して実行されているコストの高いコマンドを測定できます。Using the SLOWLOG command, you can measure expensive commands being executed against the server.

サーバー側の帯域幅の制限Server-side bandwidth limitation

キャッシュ サイズが違えば、ネットワーク帯域幅容量も異なります。Different cache sizes have different network bandwidth capacities. サーバーが使用可能な帯域幅を超えている場合、データはすばやくクライアントに送信されません。If the server exceeds the available bandwidth, then data won't be sent to the client as quickly. サーバーが十分な速さでデータをクライアントにプッシュできないため、クライアント要求はタイムアウトする可能性があります。Clients requests could time out because the server can't push data to the client fast enough.

"キャッシュの読み取り" および "キャッシュの書き込み" メトリックを使用すると、サーバー側の帯域幅がどれだけ使用されているかを確認できます。The "Cache Read" and "Cache Write" metrics can be used to see how much server-side bandwidth is being used. ポータルでこれらのメトリックを表示できます。You can view these metrics in the portal.

ネットワーク帯域幅の使用量が最大容量に近い状況を緩和するには:To mitigate situations where network bandwidth usage is close to maximum capacity:

  • ネットワーク要求を削減するようにクライアント呼び出し動作を変更します。Change client call behavior to reduce network demand.
  • 潜在的な影響について早期に通知される、キャッシュの読み取りやキャッシュの書き込みなどのメトリックに関するアラートを作成します。Create alerts on metrics like cache read or cache write to be notified early about potential impacts.
  • ネットワーク帯域幅容量の多いより大きいキャッシュ サイズにスケーリングします。Scale to a larger cache size with more network bandwidth capacity.

関連情報Additional information