StackExchange.Redis TIMEOUT 增长的未发送队列
StackExchange.Redis TIMEOUT growing unsent queue
我们上周末的测试环境看到许多 VM 开始记录超时,其中未发送队列一直在增长:
Timeout performing GET 0:B:ac64ebd0-3640-4b7b-a108-7fd36f294640, inst:
0, mgr: ExecuteSelect, queue: 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:
(Busy=5,Free=395,Min=4,Max=400)
Timeout performing SETEX 0:B:pfed2b3f5-fbbf-4ed5-9a58-f1bd888f01,
inst: 0, mgr: ExecuteSelect, queue: 35193, qu: 35193, qs: 0, qc: 0,
wr: 0, wq: 0, in: 0, ar: 0, IOCP: (Busy=2,Free=398,Min=4,Max=400),
WORKER: (Busy=6,Free=394,Min=4,Max=400)
我已经阅读了很多关于分析这些的帖子,但大多数时候它不涉及未发送消息队列的增长。在此期间没有记录连接错误; AppPool 回收解决了这个问题。有没有其他人以前见过这个问题?
一些可能相关的额外信息:
- 在 StackExchange.Redis nuget 包
的 1.0.450 和 1.0.481 版本上看到相同的超时
- ASP.Net v4.5 Web API 1.x 受影响的网站
- 升级到 Redis 3.0.4(从 3.0.3)同一周遇到错误(但几天前)
- 安装了 New 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),同样是在超时前几天。为了以防万一,我们已将其回滚。
我遇到了同样的问题。
为了研究问题,我们每 10 秒记录一次 ConnectionMultiplexer 的 ConnectionCounters 以进行监控。
它只显示增长的 pendingUnsentItems,这意味着 StackExchange.Redis 不会 send/receive 来自套接字。
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 服务器 2012 R2
- .NET Framework 4.5
- ASP.NETMVC 5.2.3
- 已安装 New Relic .NET APM v5.7.17.0
看起来这个问题是在版本 5.5-5.7 之间使用 New Relic .NET APM 时发现的,并在 5.8 中得到修复。
我们上周末的测试环境看到许多 VM 开始记录超时,其中未发送队列一直在增长:
Timeout performing GET 0:B:ac64ebd0-3640-4b7b-a108-7fd36f294640, inst: 0, mgr: ExecuteSelect, queue: 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: (Busy=5,Free=395,Min=4,Max=400)
Timeout performing SETEX 0:B:pfed2b3f5-fbbf-4ed5-9a58-f1bd888f01, inst: 0, mgr: ExecuteSelect, queue: 35193, qu: 35193, qs: 0, qc: 0, wr: 0, wq: 0, in: 0, ar: 0, IOCP: (Busy=2,Free=398,Min=4,Max=400), WORKER: (Busy=6,Free=394,Min=4,Max=400)
我已经阅读了很多关于分析这些的帖子,但大多数时候它不涉及未发送消息队列的增长。在此期间没有记录连接错误; AppPool 回收解决了这个问题。有没有其他人以前见过这个问题?
一些可能相关的额外信息:
- 在 StackExchange.Redis nuget 包 的 1.0.450 和 1.0.481 版本上看到相同的超时
- ASP.Net v4.5 Web API 1.x 受影响的网站
- 升级到 Redis 3.0.4(从 3.0.3)同一周遇到错误(但几天前)
- 安装了 New 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),同样是在超时前几天。为了以防万一,我们已将其回滚。
我遇到了同样的问题。
为了研究问题,我们每 10 秒记录一次 ConnectionMultiplexer 的 ConnectionCounters 以进行监控。
它只显示增长的 pendingUnsentItems,这意味着 StackExchange.Redis 不会 send/receive 来自套接字。
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 服务器 2012 R2
- .NET Framework 4.5
- ASP.NETMVC 5.2.3
- 已安装 New Relic .NET APM v5.7.17.0
看起来这个问题是在版本 5.5-5.7 之间使用 New Relic .NET APM 时发现的,并在 5.8 中得到修复。