StackExchange.Redis TIMEOUT增长未发送的队列

时间:2015-09-24 14:03:45

标签: stackexchange.redis

上周末我们的测试环境看到一些虚拟机开始记录超时,其中未发送的队列一直在增长:

  

超时执行GET 0:B:ac64ebd0-3640-4b7b-a108-7fd36f294640,inst:   0,mgr:ExecuteSelect,队列号:35199,qu:35199,qs:0,qc:0,wr:0,   wq:0,in:0,ar:0,IOCP :( Busy = 2,Free = 398,Min = 4,Max = 400),WORKER:   (忙碌= 5,免费= 395,最小值= 4,最大= 400)

     

超时执行SETEX 0:B:pfed2b3f5-fbbf-4ed5-9a58-f1bd888f01,   inst:0,mgr:ExecuteSelect,队列:35193,qu:35193,qs:0,qc:0,   wr:0,wq:0,in:0,ar:0,IOCP :( Busy = 2,Free = 398,Min = 4,Max = 400),   工人:(忙碌= 6,自由= 394,最小= 4,最大= 400)

我已经阅读了很多关于分析这些内容的帖子,但大多数时候它并没有涉及未发送的消息队列增长。在此期间未记录任何连接错误; AppPool回收解决了这个问题。有没有人以前见过这个问题?

一些可能相关的额外信息:

  1. 在1.0.450和1.0.481版本的StackExchange.Redis nuget包上看到相同的超时
  2. ASP.Net v4.5 Web API 1.x网站是受影响的网站
  3. 升级到Redis 3.0.4(从3.0.3开始)同一周遇到错误(但前几天)
  4. 安装新的Relic .NET APM v5.5.52.0,其中包括一些StackExchange.Redis工具(https://docs.newrelic.com/docs/release-notes/agent-release-notes/net-release-notes/net-agent-55520),再次,超时前几天。为了以防万一,我们已经回复了这篇文章。

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。

为了研究问题,我们记录ConnectionMultiplexer的ConnectionCounters,每隔10秒进行监控。

它仅显示增长的pendingUnsentItems,这意味着StackExchange.Redis不会从套接字发送/接收。

completedAsynchronously completedSynchronously  pendingUnsentItems  responsesAwaitingAsyncCompletion    sentItemsAwaitingResponse
1   10  4   0   0
1   10  28  0   0
1   10  36  0   0
1   10  51  0   0
1   10  65  0   0
1   10  72  0   0
1   10  85  0   0
1   10  104 0   0
1   10  126 0   0
1   10  149 0   0
1   10  169 0   0
1   10  190 0   0
1   10  207 0   0
1   10  230 0   0
1   10  277 0   0
1   10  296 0   0
...snip
1   10  19270   0   0
1   10  19281   0   0
1   10  19291   0   0
1   10  19302   0   0
1   10  19313   0   0

我猜套接字编写器线程已经停止了吗?

我的环境

  • StackExchange.Redis 1.0.481
  • Windows Server 2012 R2
  • .NET Framework 4.5
  • ASP.NET MVC 5.2.3
  • 已安装新版Relic .NET APM v5.7.17.0

答案 1 :(得分:0)

看起来在版本5.5-5.7之间使用New Relic .NET APM时出现问题,并在5.8中修复。