redis 抛出超时错误
redis throws timeout errors
我的服务器几个小时前开始抛出以下异常,原因不明。
这是一个网络应用程序。
有人可以帮忙吗?我能做什么?
, Timeout performing 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: (Busy=0,Free=1000,Min=4,Max=1000),
WORKER: (Busy=11,Free=8180,Min=4,Max=8191), Local-CPU: unavailable (Please take a look at
this article for some common client-side issues that
can cause timeouts: https://github.com/StackExchange/StackExchange.Redis/tree/master/Docs/Timeouts.md)
, Timeout performing 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: (Busy=0,Free=1000,Min=4,Max=1000),
WORKER: (Busy=18,Free=8173,Min=4,Max=8191), Local-CPU: unavailable (Please take a look at
this article for some common client-side issues that
can cause timeouts: https://github.com/StackExchange/StackExchange.Redis/tree/master/Docs/Timeouts.md)
堆栈跟踪
at
StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor1 processor, ServerEndPoint server) in C:\TeamCity\buildAgent\workae0647004edff78\StackExchange.Redis\StackExchange\Redis\ConnectionMultiplexer.cs:line 2044 at
StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor
1 processor, ServerEndPoint server) in C:\TeamCity\buildAgent\workae0647004edff78\StackExchange.Redis\StackExchange\Redis\RedisBase.cs:line 81 at
StackExchange.Redis.RedisDatabase.HashGetAll(RedisKey key, CommandFlags flags) in C:\TeamCity\buildAgent\workae0647004edff78\StackExchange.Redis\StackExchange\Redis\RedisDatabase.cs:line 130 at ...
编辑:
是否有可能我有太多未关闭的连接?
我有一个 static 属性:
public static ConnectionMultiplexer Redis = ConnectionMultiplexer.Connect("localhost:1234,abortConnect=false");
然后从每个地方我需要查询我做的redis:
IDatabase db = GlobalStaticClass.redis.GetDatabase();
这种方法有问题吗?
编辑 2 [对 marc 的回答]:
- 我有一些非常大 (1MB) 的键,还有一些只是数字或小字符串。但这并不新鲜。
几个月来都是这样。今天,2 小时前,ALL redis 请求突然开始抛出异常。 (附加的例外只是一个例子)
不多。 Redis 从来没有成为瓶颈。
Slowlog 没有显示任何有趣的内容。
- 我该如何检查?
- 现在正在尝试。
编辑 3:
重置 IIS 解决问题 15-30 分钟,然后它再次启动,永不停止。
编辑 4:这是托管公司的错。与redis关系不大。
它导致我们所有的服务器都非常慢,redis 是第一个出现 return 超时错误的服务器。
你的回答确实帮助我找到了责任人。
谢谢大家
总体方法应该没问题;出站是明确的,我们有少量的入站数据,我们有一个活跃的 reader - 这看起来很健康。所以我们进入上下文:
根据您的超时错误消息(请注意 "Busy" 的值大于 "Min" 的值),您遇到了线程池增长限制。
执行 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: (Busy=0,Free=1000,Min=4,Max=1000), WORKER: (Busy=11,Free=8180,最小=4,最大=8191),
这里有一些您可以尝试的解释和建议。 https://gist.github.com/JonCole/e65411214030f0d823cb#file-threadpool-md
我的服务器几个小时前开始抛出以下异常,原因不明。 这是一个网络应用程序。 有人可以帮忙吗?我能做什么?
, Timeout performing 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: (Busy=0,Free=1000,Min=4,Max=1000), WORKER: (Busy=11,Free=8180,Min=4,Max=8191), Local-CPU: unavailable (Please take a look at this article for some common client-side issues that can cause timeouts: https://github.com/StackExchange/StackExchange.Redis/tree/master/Docs/Timeouts.md)
, Timeout performing 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: (Busy=0,Free=1000,Min=4,Max=1000), WORKER: (Busy=18,Free=8173,Min=4,Max=8191), Local-CPU: unavailable (Please take a look at this article for some common client-side issues that can cause timeouts: https://github.com/StackExchange/StackExchange.Redis/tree/master/Docs/Timeouts.md)
堆栈跟踪
at StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor
1 processor, ServerEndPoint server) in C:\TeamCity\buildAgent\workae0647004edff78\StackExchange.Redis\StackExchange\Redis\ConnectionMultiplexer.cs:line 2044 at StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor
1 processor, ServerEndPoint server) in C:\TeamCity\buildAgent\workae0647004edff78\StackExchange.Redis\StackExchange\Redis\RedisBase.cs:line 81 at StackExchange.Redis.RedisDatabase.HashGetAll(RedisKey key, CommandFlags flags) in C:\TeamCity\buildAgent\workae0647004edff78\StackExchange.Redis\StackExchange\Redis\RedisDatabase.cs:line 130 at ...
编辑: 是否有可能我有太多未关闭的连接?
我有一个 static 属性:
public static ConnectionMultiplexer Redis = ConnectionMultiplexer.Connect("localhost:1234,abortConnect=false");
然后从每个地方我需要查询我做的redis:
IDatabase db = GlobalStaticClass.redis.GetDatabase();
这种方法有问题吗?
编辑 2 [对 marc 的回答]:
- 我有一些非常大 (1MB) 的键,还有一些只是数字或小字符串。但这并不新鲜。
几个月来都是这样。今天,2 小时前,ALL redis 请求突然开始抛出异常。 (附加的例外只是一个例子)
不多。 Redis 从来没有成为瓶颈。
Slowlog 没有显示任何有趣的内容。
- 我该如何检查?
- 现在正在尝试。
编辑 3: 重置 IIS 解决问题 15-30 分钟,然后它再次启动,永不停止。
编辑 4:这是托管公司的错。与redis关系不大。
它导致我们所有的服务器都非常慢,redis 是第一个出现 return 超时错误的服务器。
你的回答确实帮助我找到了责任人。
谢谢大家
总体方法应该没问题;出站是明确的,我们有少量的入站数据,我们有一个活跃的 reader - 这看起来很健康。所以我们进入上下文:
根据您的超时错误消息(请注意 "Busy" 的值大于 "Min" 的值),您遇到了线程池增长限制。
执行 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: (Busy=0,Free=1000,Min=4,Max=1000), WORKER: (Busy=11,Free=8180,最小=4,最大=8191),
这里有一些您可以尝试的解释和建议。 https://gist.github.com/JonCole/e65411214030f0d823cb#file-threadpool-md