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 https://stackexchange.github.io/StackExchange.Redis/Timeouts
如果我们查看来自 StackExchange.Redis 的示例错误消息(构建
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,然后进行测试和调整
需要。