You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Bull已完成任务留存Key导致Redis内存耗尽崩溃的问题中恢复

Bull队列默认配置导致Redis内存耗尽的恢复方案

紧急恢复步骤

如果当前Redis已经因为内存耗尽不可用,优先按以下步骤恢复业务:

  • 优先临时扩容Redis实例内存,快速解除OOM限制,保证核心业务可用
  • 确认无需留存历史已完成/失败的任务数据后,可批量清理Bull生成的无效历史任务Key,匹配规则为bull:{队列名称}:{completed/failed}:*,批量清理命令参考:
    # 清理所有已完成的Bull任务Key,执行前请先测试匹配规则避免误删
    redis-cli --scan --pattern "bull:*:completed:*" | xargs redis-cli DEL
    # 如需清理失败任务,修改pattern为bull:*:failed:*即可
    
  • 业务允许的前提下,暂时暂停非核心Bull队列的消费与任务提交,降低新Key生成速率,为后续配置调整预留时间

长期规避方案

Bull默认会永久留存所有已完成、已失败的任务Key,需要主动配置任务留存策略避免内存泄漏重复发生:

  • 队列初始化时配置全局默认任务规则,示例如下:
    const Queue = require('bull');
    const workQueue = new Queue('业务队列名称', {
      redis: {
        host: 'Redis地址',
        port: 6379,
        password: 'Redis密码(如有)'
      },
      defaultJobOptions: {
        // 已完成任务保留1小时,单位为毫秒,可根据业务需求调整
        removeOnComplete: 3600 * 1000,
        // 失败任务保留7天,单位为毫秒,可根据业务需求调整,设置为true则任务完成/失败后直接删除
        removeOnFail: 7 * 24 * 3600 * 1000
      }
    });
    
  • 如需为单任务单独配置留存规则,可在调用add方法提交任务时传入removeOnComplete和removeOnFail参数,优先级高于队列全局配置
  • 新增Redis巡检规则,定期统计Bull相关Key的内存占用和数量增长趋势,提前发现异常

注意:上述配置修改仅对新提交的任务生效,历史已生成的无效任务Key需要手动清理或自行配置定时脚本定期清理。

内容的提问来源于stack exchange,提问作者Tim Heilman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 11:21:02