逐日 AI

Redis 队列与缓存问题排查:任务卡住、连接失败、内存告警

作者:夸父

逐日 AI 的任务队列跑在 Redis(BullMQ)上。本文排查三类高频问题:任务卡住不动、连接失败、内存告警,以及重启 Redis 前必须知道的事。

任务卡住:三层排查

第一层:worker 活着吗。pm2 list 看 zhuri-worker 状态——worker 是消费队列的角色,它挂了队列就"堵住"。拉起后未完成切片自动续跑(任务状态持久化在 Redis)。

第二层:Redis 可达吗。redis-cli ping 返回 PONG 才算通。连接失败常见原因:Redis 没启动、密码不对(requirepass 配置与 .env 不一致)、绑定地址限制(只允许 127.0.0.1 而应用在远程)。

第三层:队列里有毒丸吗。某个任务反复失败阻塞了队列——BullMQ 的失败任务有重试上限,超限进入 failed 集合。查看 failed 任务的原因(通常是模型 API 报错,对照 API 报错排查),修掉原因后重提交。

连接失败:三个配置位

ECONNREFUSED:Redis 没起或端口不对;NOAUTH:密码缺失或不符;max retries reached:网络抖动或 Redis 过载——前两个改配置,第三个看 Redis 的负载(info stats)。

内存告警:容量规划

Redis 跑队列的内存占用与任务量相关:批量日(几百个切片任务)内存会上一个台阶。配置 maxmemory + 监控 used_memory(见数据库维护的每周例行),达到 70% 就扩容或清理——队列场景禁止用 allkeys-lru 淘汰策略(会把等待中的任务挤掉),用 noeviction + 及时扩容。

常见问题

任务一直显示"排队中"不动?

按顺序查:worker 进程是否存活(pm2 list)、Redis 是否可达(redis-cli ping)、队列里是否有被阻塞的任务( BullMQ 面板或 LLEN 查看)。多数是 worker 挂了或 Redis 连接断开——pm2 restart worker 拉起。

重启 Redis 会丢任务吗?

取决于持久化配置:开启 AOF(appendonly yes)后重启不丢队列数据;未开持久化的 Redis 重启即清空——未完成的切片任务需要重新提交(已完成的不受影响,结果在数据库里)。

三步,出你的第一条片

套用一个案例模板,替换成你的内容——注册后即可进入工作台逐段生成、合成导出。

反馈建议