【问题标题】:StackExchange.Redis timeouts GETStackExchange.Redis 超时 GET
【发布时间】:2016-11-10 16:50:27
【问题描述】:

我在使用 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)

在几乎所有我只得到queueqs 的例外情况中,它的值都在变化,并且它的值高达11

我正在使用 nuget 版本 1.0.488。应用程序托管在 Windows Server 2012 上的 IIS 8.5 上。在那台机器上,我们有 32gb 的 RAM,它的使用率为 30-50%。我已将maxmemory 设置为16gb 并将maxheap 设置为22gb。保存到磁盘被禁用。我仅将它用作会话存储。

Redis 服务器(版本 x64-2.8.2402)安装在同一台机器上。这是我拥有的redis-cli info 的网址。

这也是我得到的异常的一部分:

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,我尝试将其增加到25000

我还为 IIS 增加了 minIoThread 中的 machine.config。这是我放置的值<processModel autoConfig="true" minIoThreads="50" minWorkerThreads="50" maxWorkerThreads = "100" maxIoThreads = "100"/>

【问题讨论】:

    标签: stackexchange.redis


    【解决方案1】:

    阅读redis slowlog,看看redis上是否有慢查询。也许您正在使用 keys 命令? Redis 是单线程的,因此一个缓慢的查询可能会阻塞所有内容,并且由于客户端不会永远等待 redis,因此您会遇到超时。

    【讨论】:

    • slowlog 显示我有一些 SETEX 很慢。我不确定这是否直接导致超时。保存时我有高达 7mb 的数据。这是我得到的示例:1)(整数)3852 2)(整数)1478858333 3)(整数)19014
    • 写入 7MB 的 blob 是一个阻塞单线程的繁重操作。有什么办法可以缩小尺寸?
    • 不,不完全是。我正在存储从 3rd 方服务返回的数据,其大小可能会有所不同。
    猜你喜欢
    • 2019-01-10
    • 2015-08-15
    • 2019-05-07
    • 2017-04-06
    • 2015-08-28
    • 2017-08-14
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多