RedisTimeoutException 中的“bw: SpinningDown”是什么意思?

sas*_*alm 3 timeoutexception redis

此错误中的“bw:SpinningDown”是什么意思 -

执行 GET 超时(5000 毫秒),下一步:GET foo!bar!baz,inst:5,qu:0,qs:0,aw:False,bw:SpinningDown,...

这是否意味着 Redis 服务器实例正在停止运行,或者其他原因?

Hur*_*ron 5

它实际上意味着别的东西。缩写 bw 代表 Backlog-Writer,其中包含 Redis 中积压工作的状态。

对于这个特定的状态:SpinningDown,您实际上遗漏了与其相关的重要部分。

正在跟踪的工作人员有 4 个值:忙碌、空闲、最小和最大。让我们采用这些假设值:Busy=250,Free=750,Min=200,Max=1000

在这种情况下,现有(繁忙)线程比最小值多 50 个。

启动新线程的成本很高,特别是当您达到 .NET 提供的全局线程池限制时。在这种情况下,由于限制,每 500 毫秒仅创建 1 个新线程。

因此,一旦 Backlog 处理完某个项目,它不会只是退出线程,而是将其保持在等待状态 (SpinningDown) 5 秒。如果在此期间仍有更多 Backlog 需要处理,同一线程将处理 Backlog 中的另一个项目。

如果这 5 秒内不需要处理 Backlog 项目,则线程将退出,这最终将导致 Busy(现有)线程减少。

当然,这只发生在超过最小计数的线程上,因为即使没有工作要做,这些线程也会保持活动状态。