stackexchange.redis即使在增加超时后也会抛出超时?

时间:2017-05-22 13:59:38

标签: c# redis stackexchange.redis

尝试从缓存中删除时出现以下错误:

Timeout performing DEL test.com, inst: 0, mgr: ExecuteSelect, err: never, queue: 0, qu: 0, qs: 0, qc: 0, wr: 0, wq: 0, in: 0, ar: 0, clientName: ORLWS052, serverEndpoint: Unspecified/pub-redis-16778.us-west-2-1.1.ec2.garantiadata.com:16778, keyHashSlot: 6928, IOCP: (Busy=3,Free=997,Min=4,Max=1000), WORKER: (Busy=4,Free=4091,Min=4,Max=4095), Local-CPU: 100% (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)

更新时我也会收到类似的超时。

我不知道怎么读这个,所以如果有人知道那会有帮助。

我尝试更新或删除的密钥大小为5515字节。

我还运行了slowlog get命令,没有(长度为0)

我也试图增加超时时间,但这不起作用

2 个答案:

答案 0 :(得分:1)

IOCP: (Busy=3,Free=997,Min=4,Max=1000), WORKER: (Busy=4,Free=4091,Min=4,Max=4095), Local-CPU: 100%

请检查您的ICOP,WORKER忙线程和最小线程。 CPU也是100%。 timeoutHelpLink已在最新版本中更新。

https://stackexchange.github.io/StackExchange.Redis/Timeouts

  

如果我们查看来自StackExchange.Redis的示例错误消息(build   1.0.450或更高版本),您将看到它现在打印ThreadPool统计信息(请参阅下面的IOCP和WORKER详细信息)。

     

System.TimeoutException: Timeout performing GET MyKey, inst: 2, mgr: Inactive, queue: 6, qu: 0, qs: 6, qc: 0, wr: 0, wq: 0, in: 0, ar: 0, IOCP: (Busy=6,Free=994,Min=4,Max=1000), WORKER: (Busy=3,Free=997,Min=4,Max=1000)

     

在上面的例子中,您可以看到IOCP线程有6个   忙线程,系统配置为允许4个最小线程。   在这种情况下,客户端可能会看到两个500毫秒的延迟   因为6> 4。

     

请注意,如果增长,StackExchange.Redis可以达到超时   IOCP或WORKER线程受到限制。

     

建议:鉴于上述信息,建议设置   IOCP和WORKER线程的最小配置值   大于默认值。我们无法提供一刀切的服务   关于这个值应该是什么的指导因为一个人的正确价值   应用程序对于其他应用程序来说太高/太低。这个设置   也可以影响复杂的其他部分的性能   应用程序,因此您需要根据具体情况微调此设置   需要。一个好的起点是200或300,然后进行测试和调整   需要的。

答案 1 :(得分:0)

我遇到了同样的问题,并设法通过更改syncTimeout参数来解决了这个问题。默认情况下为1000毫秒。 https://stackexchange.github.io/StackExchange.Redis/Configuration.html

根据消息来源,它也影响AsyncTimeouthttps://github.com/StackExchange/StackExchange.Redis/blob/3f7e5466c6bbff96a3ed1130b637a097d21f3fed/src/StackExchange.Redis/ConfigurationOptions.cs#L171