Consumer启动时正常,数小时后占用数GB并被系统杀死。应先定位单条消息泄漏还是长期进程累积,再设置安全重启边界。
排查路径
- 记录RSS随消息数变化,使用固定测试消息复现;同时检查未释放的大Collection、图片资源和静态缓存。
- 逐条处理时清理实体引用,避免把完整对象追加到进程级数组;异常路径也要关闭文件与外部连接。
落地修复
- 使用--max-messages让Consumer定期优雅退出,由Supervisor/systemd自动拉起,并设置停止超时。
- 限制重试和死信策略,单条毒消息不能在内存中无限失败重放。
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在区间内波动,进程轮换不丢消息、不重复业务写入,毒消息可追踪。

