2016-11-22 6 views
0

StackExchange.Redisを使用する分散型Webサービス(WCF)があり、1日あたり約5百万のリクエストがあります。StackExchange.Redis要求数が多い場合のタイムアウト

私は(値は、いくつかの回をdiferentすることができます)このエラーにいくつかの時間を取得:

System.TimeoutException:SISMEMBER KeyAllUsersFlagを実行タイムアウト、研:7、キュー:6、QU:0、QS:6 (Busy = 20、Free = 3180、Min = 2400、Max = 3200)、ワーカー:(Busy = 0、wq: 7、無料= 793、分= 400、最大= 800)、ローカルCPU:

:私は持っているのWebConfigで使用できない

のhttpRuntime targetFramework = "4.6.1" minFreeThreads = "704" 私はminLocalRequestFreeThreadsマシンの設定に= "608"

のprocessModel maxWorkerThreads = "100" maxIoThreads = "400" minWorkerThreads =マルチプレクサのための設定には "50" minIoThreads = "300"

私が持っている:

var configurationOptions = new ConfigurationOptions 
{ 
    AbortOnConnectFail = false, 
    SyncTimeout = 2000, 
}; 

私はredisへの呼び出しをotimizeするために、速い応答を持ってこのエラーを出さないために何ができますか?

+1

おそらく関連するhttps://github.com/StackExchange/StackExchange.Redis/issues/83 –

答えて

1

redis serverへの確立された接続の量に問題がある可能性があります。 TCPポートを介して接続が確立されています。単一の送信元IPが単一の宛先IPとポートに対して行うことができるTCPセッションの最大数は65,535です。これは、ソースIPからの16ビットソースポート範囲(0を除く)内の使用可能なすべてのソースポートが使用されていることを前提としています。実際には、ほとんどのオペレーティングシステムでは、クライアントが使用するポートタイプ32768 (0-65535の範囲の後半で最も小さい番号)。これは、単一の宛先IPおよびリスニングポートに対して最大32,768の接続を確立できることを意味します。明らかに、他のリソース制約がこれを防ぐかもしれませんが、それは理論上の最大値です。 長い話を短くするには - 労働者が作業を終えた後で接続を閉じることを確認してください(SISMEMBERコマンド)。エラーメッセージには、使用可能なワーカーがありますが、赤いサーバーへの接続を確立できず、クライアントのタイムアウトのために失敗しています。 接続数を確認してください。使用可能な接続数が不足している場合は、接続中にkeepAliveオプションを使用して再接続してください。また、connectTimeoutオプションを使用して、接続操作のタイムアウトをミリ秒単位で設定し、connectRetryを使用して、最初の接続コマンドで接続試行を繰り返す回数を設定することもできます。

関連する問題