2017-03-21 16 views
1

現在、アプリケーションキャッシュとしてRedis-instanceに多くの要求を行うアプリケーションを使用する際に問題が発生しています。Redis IOCPの最適値を見つける方法

さまざまな操作でさまざまなタイムアウトが発生しました。次のように:

System.TimeoutException: Timeout performing GET MyKey, inst: 2, mgr: Inactive, 
queue: 6, qu: 0, qs: 6, qc: 0, wr: 0, wq: 0, in: 0, ar: 0, 
IOCP: (Busy=6,Free=994,Min=4,Max=1000), 
WORKER: (Busy=3,Free=997,Min=4,Max=1000) 

ドキュメントを相談した後、我々は次の記事(https://github.com/StackExchange/StackExchange.Redis/blob/master/Docs/Timeouts.md)WorkerThreadsの数を増やすために私達を推薦する(デフォルト値= 4)

どのように我々は分の最適な量を見つけることができました/最大のwokerthreads?レディスは200-300で始まることをお勧めします。しかし、これはデフォルト値の4と比較すると高いと思われます。

数値を高く設定したときに起こる可能性のある問題は何ですか?このデフォルト値が4のように低いのはなぜですか?

答えて

1

ThreadPool.SetMinThreads(...)を使用して値を設定すると、それらのスレッドが瞬時にスピンアップするか、常にメンテナンスされるということではありません。つまり、各スレッドタイプの「最小」設定に達するまで、スレッドプールは新しいワーカースレッドまたはI/O完了スレッドをオンデマンドで(スロットルなしで)提供します。

デフォルトでは、最小スレッド数はシステム上のプロセッサ数に設定されています。

200-300に設定する必要はありません。それをいくつかの値(例えば100)に増やして、必要に応じてそれを調整することができます。バースト的な負荷の場合には、より高い数値が必要になります。

関連する問題