调度器出现一个诡异现象:DB 里明明没有 running 的任务,但全局在途数却显示满载,新任务全部卡在"等待中"。

根因

计数器的加法在入队前执行,减法在 Job 收尾时执行。当 worker 被 supervisor 重启或超时被杀,Job 永远不会收尾,计数器就一直停在高位。

修复思路

  • 调度前在 同一把锁内用 DB 实况校正计数器:count(status="running"),差值用 add/dec 补齐。
  • 以 DB 行数为权威在途数,Redis 只作影子。
  • 排查口诀:0 在途却全局满载,必然是泄漏。