直接打开/horizon可查看异步队列运行状态,但需结合仪表盘概览、Supervisor/Failed状态及Redis或数据库底层数据交叉验证:Pending≥50、Processing长期为0、Jobs/min下降且Avg.duration突升均提示积压风险,Redis的LLEN或数据库jobs表查询才是真实积压判定依据。

直接打开 /horizon 就能看异步队列运行状态,但要真正盯住关键风险,得结合三个层面交叉验证——光刷页面数字容易漏掉真实问题。
看 Horizon 仪表盘的实时指标
顶部队列概览栏列出所有被监控的队列(如 default、high、notifications),重点关注四项数据:
- Pending jobs:等待被取走的任务数。持续 ≥ 50 是积压信号,尤其 high 队列需立即响应
- Processing:正在执行的任务数。长期为 0 或极低,说明 worker 没在干活或 supervisor 漏配该队列
- Jobs per minute:近一分钟完成数。明显下降 + Pending 上升 = 处理能力已跟不上
- Avg. duration:平均执行耗时。突然拉高往往意味着任务卡住、DB 查询慢或外部 API 延迟
进队列详情页定位具体卡点
点击队列名(比如 high)进入详情页,重点看两个区域:
-
Recent Jobs 列表:筛选
reserved_at为空、且available_at是 1 分钟前甚至更早的任务——这类任务“躺在队列头却没人取”,是典型的消费阻塞 - Metrics 图表区:吞吐量(Jobs/min)和耗时(Avg. duration)曲线是否同步异常?比如耗时陡升同时吞吐断崖下跌,大概率是某类任务内部逻辑变慢或资源争抢
查 Supervisor 和 Failed 状态确认执行层健康度
左侧导航栏里的这两个入口反映的是底层执行是否正常:
- Supervisors:显示所有 supervisor 进程状态。绿色表示活跃,灰色表示停止。如果某个本该监听 high 的 supervisor 显示 “Stopped”,说明进程挂了或配置未生效
-
Failed:列出被 Horizon 捕获的失败任务(注意:仅限 Redis 驱动下存于
horizon:failed结构,不等于 database 驱动的failed_jobs表)。点开任一失败项,能看到完整堆栈、原始 payload 和重试按钮
用 Redis 和数据库做底层交叉验证
Horizon 数据有缓存延迟(默认 5 秒刷新),不能单靠它判断积压。必须配合:
-
Redis LLEN 命令:执行
redis-cli LLEN queues:high查瞬时长度(注意前缀,如设了HORIZON_PREFIX=prod:,实际键是prod:queues:high)。返回值突增至 100+ 且 30 秒内不下降,基本可断定积压 -
jobs 表查询(仅 database 驱动有效):执行
SELECT COUNT(*) FROM jobs WHERE queue = 'high' AND reserved_at IS NULL。这个条件才代表真正“待处理”的任务;reserved_at不为空的是正在执行的,不算积压


















