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, ResultProcessor1 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 的回答]:

  1. 我有一些非常大 (1MB) 的键,还有一些只是数字或小字符串。但这并不新鲜。

几个月来都是这样。今天,2 小时前,ALL redis 请求突然开始抛出异常。 (附加的例外只是一个例子)

  1. 不多。 Redis 从来没有成为瓶颈。

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

  3. 我该如何检查?
  4. 现在正在尝试。

编辑 3: 重置 IIS 解决问题 15-30 分钟,然后它再次启动,永不停止。

编辑 4:这是托管公司的错。与redis关系不大。

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

你的回答确实帮助我找到了责任人。

谢谢大家

总体方法应该没问题;出站是明确的,我们有少量的入站数据,我们有一个活跃的 reader - 这看起来很健康。所以我们进入上下文:

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

根据您的超时错误消息(请注意 "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