redis抛出超时错误

时间:2017-04-04 11:40:44

标签: redis stackexchange.redis

我的服务器因为一个未知原因在几小时前开始抛出以下异常。 它是一个Web应用程序。 有人可以帮忙吗?我该怎么办?

  

,Timeout执行GET SomeKey,inst:1,mgr:ProcessReadQueue,err:never,queue:12,qu:0,qs:12,qc:0,wr:0,wq:0,in:1702,ar :1,clientName:SSD41ACCU10147,   IOCP :(忙碌= 0,自由= 1000,最小值= 4,最大值= 1000),   工人:(忙= 11,自由= 8180,最小= 4,最大= 8191),本地CPU:不可用(请看一下   本文针对一些常见的客户端问题   可能导致超时:https://github.com/StackExchange/StackExchange.Redis/tree/master/Docs/Timeouts.md

     

,Timeout执行GET SomeKey2,inst:2,mgr:ProcessReadQueue,err:never,queue:33,qu:0,qs:33,qc:0,wr:0,wq:0,in:1141,ar :1,clientName:SSD41ACCU10147,   IOCP :(忙碌= 0,自由= 1000,最小值= 4,最大值= 1000),   工作人员:(忙碌= 18,自由= 8173,最小值= 4,最大值= 8191),本地CPU:不可用(请看一下   本文针对一些常见的客户端问题   可能导致超时:https://github.com/StackExchange/StackExchange.Redis/tree/master/Docs/Timeouts.md

堆栈跟踪

  

在   StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl [T](消息消息,ResultProcessor 1 processor, ServerEndPoint server) in C:\TeamCity\buildAgent\work\3ae0647004edff78\StackExchange.Redis\StackExchange\Redis\ConnectionMultiplexer.cs:line 2044 at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor 1处理器,ServerEndPoint服务器)位于C:\ TeamCity \ buildAgent \ work \ 3ae0647004edff78 \ StackExchange.Redis \ StackExchange \ Redis \ RedisBase.cs:第81行   C:\ TeamCity \ buildAgent \ work \ 3ae0647004edff78 \ StackExchange.Redis \ StackExchange \ Redis \ RedisDatabase.cs中的StackExchange.Redis.RedisDatabase.HashGetAll(RedisKey键,CommandFlags标志):第130行...

修改 我可能有很多没有关闭的连接吗?

我有一个静态属性:

  

public static ConnectionMultiplexer Redis = ConnectionMultiplexer.Connect(" localhost:1234,abortConnect = false");

然后从每个地方我需要查询redis:

  

IDatabase db = GlobalStaticClass.redis.GetDatabase();

这种方法有问题吗?

编辑2 [对marc的回答]:

  1. 我有一些非常大的键(1MB),有些只是数字或小字符串。但这不是新的。
  2. 几个月来,它就像那样。突然,今天,2小时前,所有 redis请求开始抛出异常。 (附加的例外只是一个例子)

    1. 不多。 redis从未接近瓶颈。

    2. Slowlog没有显示任何内容。

    3. 我该怎么检查?
    4. 立即尝试。
    5. 编辑3: 重置IIS解决问题15-30分钟,然后它再次启动,永不停止。

      编辑4:这是托管公司的问题。并没有真正意识到redis。

      它导致我们所有服务器都非常慢,redis是第一个返回超时错误的服务器。

      您的回答确实帮助我找到了谁负责。

      谢谢大家。

2 个答案:

答案 0 :(得分:2)

整体方法应该没问题;出站很清楚,我们在入站时有少量数据,而且我们有一个活跃的读者 - 看起来很健康。所以我们进入了上下文:

  • SomeKey中的数据大小是多少?
  • 服务器有多忙?
  • slowlog,表示任何特别长时间运行的操作可以解释服务器上的阻塞吗?
  • 是显示长数据库持久性操作或可能解释事物的从属操作的服务器日志吗?
  • 作为最后的手段:您是否尝试过增加同步超时? (请参阅搜索syncTimeout here

答案 1 :(得分:0)

从您的超时错误消息(请注意"忙碌"的值大于" Min"的值),您正在经历Threadpool增长限制。

超时执行GET SomeKey,inst:1,mgr:ProcessReadQueue,错误:从不,队列:12,qu:0,qs:12,qc:0,wr:0,wq:0,in:1702,ar: 1,clientName:SSD41ACCU10147,IOCP :( Busy = 0,Free = 1000,Min = 4,Max = 1000),WORKER:( Busy = 11 ,Free = 8180, Min = 4 ,Max = 8191),

以下是您可以尝试的一些问题的解释和建议。 https://gist.github.com/JonCole/e65411214030f0d823cb#file-threadpool-md