Redisのタイムアウトのトラブルシューティング
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
Redisのタイムアウト(RedisTimeoutException)は、サーバーまたはクライアントによって引き起こされるさまざまな条件が原因で発生します。このトピックは、最も一般的なタイムアウト シナリオのいくつかの答えを見つけるのに役立ちます。詳細については、GithubとMicrosoft Azureのドキュメントも参照してください。
サーバー側とクライアント側の問題
サーバー側とクライアント側の問題
Azure Cache for Redisの状態、またはそれをホストしている仮想マシンが原因で発生する問題を解決する方法について説明します。
インフラストラクチャ関連の原因に対して考えられる解決策:
|
原因 |
解決 |
|---|---|
|
帯域幅/サイズの制限 |
Redis Serverのメトリクスを監視して、帯域幅/サイズの制限に達しているかどうかを確認します。考えられる解決策:
|
|
クライアントのCPU/メモリ/帯域幅の使用率が高い |
CPU、メモリ、または帯域幅の使用量が多いと、要求がoperationTimeoutInMilliseconds間隔内に処理されず、要求がタイムアウトする可能性があります。考えられる解決策:
|
|
サーバーとクライアント アプリケーションがAzureの同じリージョンにない |
キャッシュとクライアントを同じAzureリージョンに配置することをお勧めします。たとえば、キャッシュが米国東部にあるが、クライアントが米国西部にあり、リクエストがoperationTimeoutInMilliseconds間隔内に完了しない場合、タイムアウトが発生する可能性があります。 |
アプリケーションの問題
アプリケーションの問題
高負荷は、いくつかの理由の組み合わせによりRedisTimeoutExceptionを引き起こす可能性があります。問題を解決するために、アプリケーションのセットアップ/負荷を調整してみてください。
アプリケーション関連の原因に対して考えられる解決策:
|
原因 |
解決 |
|---|---|
|
スレッドの制限 |
RedisTimeoutExceptionメッセージにWORKERとIOCPの値 (Busy) が含まれており、これらの値がメッセージのMin値より大きい場合は、ThreadPoolサイズを監視し、Min値を負荷に合わせて調整するThreadPoolSizeMonitorのパラメーターを変更できます。 大事な 設定ファイルを直接変更しないでください。代わりに、実行時に必要な変更を実行するパッチ ファイルを作成する必要があります。
|
|
リクエストが多すぎます |
StackExchange.Redisクライアントは1つのTCP接続を使用し、一度に1つの応答しか読み取ることができません。最初の操作がタイムアウトした場合でも、サーバーとの間でのデータの送受信は停止しません。このため、他のリクエストがブロックされ、タイムアウトが発生します。RedisTimeoutExceptionメッセージでは、パラメーター qsは、送信されたが応答を処理していない要求の数を示します。 考えられる解決策:
|
|
operationTimeoutInMillisecondsまたはretryTimoutInMilliseconds |
Sitecore Redisセッション状態プロバイダーは、操作にoperationTimeoutInMillisecondsとretryTimeoutInMillisecondsという名前の設定を使用します。指定された時間内に呼び出しが完了しない場合、Redisクライアントはタイムアウト エラーをスローします。 考えられる解決策:
|