Consumer启动时正常,数小时后占用数GB并被系统杀死。应先定位单条消息泄漏还是长期进程累积,再设置安全重启边界。

排查路径

  • 记录RSS随消息数变化,使用固定测试消息复现;同时检查未释放的大Collection、图片资源和静态缓存。
  • 逐条处理时清理实体引用,避免把完整对象追加到进程级数组;异常路径也要关闭文件与外部连接。

落地修复

  1. 使用--max-messages让Consumer定期优雅退出,由Supervisor/systemd自动拉起,并设置停止超时。
  2. 限制重试和死信策略,单条毒消息不能在内存中无限失败重放。
ps -o pid,rss,etime,cmd -C php | grep consumers:startbin/magento queue:consumers:start async.operations.all --max-messages=1000# Supervisor: autorestart=true, stopwaitsecs=60

完成标准

处理相同规模消息时RSS在区间内波动,进程轮换不丢消息、不重复业务写入,毒消息可追踪。