我在使用 StackExchange.Redis 时遇到超时问题。我已经尝试过在 stackoverflow 上找到的所有内容。
这是我得到的: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)
在几乎所有我只得到的例外中queue
and qs
正在发生变化,其价值高达11
.
我使用的是nuget版本1.0.488
。应用程序托管在 Windows Server 2012 上的 IIS 8.5 上。在该计算机上,我们有 32GB 的 RAM,其使用率为 30-50%。我已经设置了maxmemory
to 16gb
和maxheap
至 22GB。保存到磁盘已禁用。我仅将其用作会话存储。
Redis服务器(版本x64-2.8.2402)安装在同一台机器上。这是redis-cli 信息 http://screencast.com/t/ZMhPTwI9Lwbo我有。
这也是我得到的异常的一部分:
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" />
。连接超时原为15000
我尝试将其增加到25000
我也增加了minIoThread
in machine.config
对于 IIS。这是我放置的值<processModel autoConfig="true" minIoThreads="50" minWorkerThreads="50" maxWorkerThreads = "100" maxIoThreads = "100"/>