首页 文章

redis抛出超时错误

提问于
浏览
0

我的服务器在几小时前开始抛出以下异常,原因不明 . 这是一个Web应用程序 . 有人可以帮忙吗?我能做什么?

,超时执行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),Local-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: (Busy = 0,Free = 1000,Min = 4,Max = 1000),WORKER :( Busy = 18,Free = 8173,Min = 4,Max = 8191),Local-CPU:不可用(请看一下这个针对可能导致超时的一些常见客户端问题的文章:https://github.com/StackExchange/StackExchange.Redis/tree/master/Docs/Timeouts.md)

堆栈跟踪

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

Edit: 我可能有很多没有关闭的连接吗?

我有 static property :

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是第一个返回超时错误的服务器 .

你的答案确实帮助我找到谁负责 .

谢谢大家 .

2 回答

  • 2

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

    • SomeKey 中数据的大小是多少?

    • 服务器有多忙?

    • slowlog表示任何特别长时间运行的操作可以解释服务器上的阻塞?

    • 是服务器日志,显示可能解释事情的长数据库持久性操作或从属操作?

    • 作为最后的手段:您是否尝试过增加同步超时? (参见搜索 syncTimeout here

  • 0

    从您的超时错误消息(请注意“忙”的值大于“最小”的值),您正在遇到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

相关问题