2016-11-01 8 views
4

StackExchange.Redisを使用しているときにタイムアウトの問題に直面しています。私はstackoverflowで見つけることができたすべて私は試してみました。私はqueueqs変更され得るほぼすべての例外でTimeout performing GET XXX, inst: 4, mgr: ProcessReadQueue, err: never, queue: 9, qu: 0, qs: 9, qc: 0, wr: 0, wq: 0, in: 65536, ar: 1, IOCP: (Busy=0,Free=1000,Min=400,Max=1000), WORKER: (Busy=35,Free=32732,Min=400,Max=32767)StackExchange.Redis timeouts GET

、それは11までの値を持っていた:ここ

は、私が取得していますものです。

ナゲットバージョン1.0.488を使用しています。アプリケーションはWindows Server 2012のIIS 8.5でホストされています。そのマシンには32GBのRAMがあり、30〜50%で使用されます。 maxmemory16gbに、maxheapを22gbに設定しました。ディスクへの保存は無効です。私はセッションストレージとしてのみ使用しています。

Redisサーバー(バージョンx64-2.8.2402)が同じマシンにインストールされています。ここには私が持っているredis-cli infoのURLがあります。

もこれは私が取得しています例外の一部です:

System.TimeoutException: Timeout performing GET Airports, inst: 1, mgr: ProcessReadQueue, err: never, queue: 4, qu: 0, qs: 4, qc: 0, wr: 0, wq: 0, in: 65536, ar: 1, IOCP: (Busy=0,Free=1000,Min=400,Max=1000), WORKER: (Busy=20,Free=32747,Min=400,Max=32767), clientName: OWNEROR-G875DJG at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in c:\TeamCity\buildAgent\work\3ae0647004edff78\StackExchange.Redis\StackExchange\Redis\ConnectionMultiplexer.cs:line 1927 at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor`1 processor, ServerEndPoint server) in c:\TeamCity\buildAgent\work\3ae0647004edff78\StackExchange.Redis\StackExchange\Redis\RedisBase.cs:line 80 at StackExchange.Redis.RedisDatabase.StringGet(RedisKey key, CommandFlags flags) in c:\TeamCity\buildAgent\work\3ae0647004edff78\StackExchange.Redis\StackExchange\Redis\RedisDatabase.cs:line 1451 at Resvoyage.Services.RedisCacheProvider.GetValue[T](String key) in c:\Development\thomalex\resvoyage\Resvoyage.Services\RedisCacheProvider.cs:line 88 

これは私の接続文字列は、<add key="LocalRedis" value="127.0.0.1:6379,connectTimeout=25000,allowAdmin=true,password=xxx" />を探している方法です。 ConnectionTimeoutは15000だったと私はまた、IISのためにmachine.configminIoThreadが増加している25000

にそれをincresing試してみました。ここに私が置いた値があります<processModel autoConfig="true" minIoThreads="50" minWorkerThreads="50" maxWorkerThreads = "100" maxIoThreads = "100"/>

答えて

3

redis slowlogを読むと、redisに遅いクエリがあるかどうかを確認します。多分あなたはkeysコマンドを使用していますか? Redisはシングルスレッドなので、1つの低速クエリがすべてをブロックする可能性があり、クライアントがレディを待たずに永遠にタイムアウトに陥ります。

+0

slowlogは私に、いくつかのSETEXが遅いことを示していました。タイムアウトが直接発生しているかどうかはわかりません。私は保存するときに最大7MBのデータを持っています。 1)(整数)3852 2)(整数)1478858333 3)(整数)19014 – zoranpro

+0

7MB BLOBの書き込みは、1つのスレッドをブロックする重い操作です。サイズを小さくする方法はありますか? – edlerd

+0

いいえ、あまりありません。私は第三者サービスから返されたデータを保存しており、そのサイズはさまざまです。 – zoranpro

関連する問題