当前位置: 首页 > news >正文

ThinkPHP 生产环境如何配置 Supervisor 守护队列进程运行?

ThinkPHP6 生产环境必须使用 queue:work 配合 Supervisor 守护,其中--sleep=3 和--max-jobs=1000 是关键参数,可避免进程内存累积和 CPU 无限占用问题。

原因分析

queue:listen 是开发模式下的轮询监听机制,每次有任务就 fork 新进程执行,长期运行会累积内存且不自动重载代码。根据 2026 年 4 月 12 日的部署实践资料,queue:listen 每次执行都重新加载整个框架,开销大;而 queue:work 启动一次后复用实例,更轻量。ThinkPHP 6+ 版本中 queue:work --daemon 已被废弃,新版只支持非 daemon 模式配合进程管理器兜底。生产环境若未配置--sleep 和--max-jobs 参数,在 Redis 连接异常时会疯狂重试导致 CPU 占用率飙升。

环境准备与版本锁定

ThinkPHP6 要求 PHP 版本不低于 7.2,并且需要开启 pcntl 扩展,检查方法为执行 php -m | grep pcntl。对于 Ubuntu/Debian 系统,安装命令为 sudo apt-get install php7.4-pcntl。使用 Composer 安装 think-queue 时,建议在 composer.json 中明确指定版本号避免自动升级带来不兼容问题,生产环境推荐配置为{"require":{"topthink/think-queue":"^3.0.12"}}。think-queue 3.x 版本专为 ThinkPHP6+ 设计,如果还在使用 ThinkPHP5.x,需要安装 2.x 版本,命令为 composer require topthink/think-queue:^2.0。

Supervisor 配置文件详解

主配置文件路径为/etc/supervisord.conf,子进程配置通常存放在/etc/supervisor/conf.d/或/etc/supervisord.d/目录下。启用 Web 控制台需配置[inet_http_server]段,port=127.0.0.1:9001,生产环境建议绑定内网 IP。子进程配置示例如下:[program:test_queue],command=/usr/bin/php /var/www/myapp/think queue:work redis --sleep=3 --max-jobs=1000 --tries=3,directory=/var/www/myapp,autostart=true,autorestart=true,startretries=3。务必使用绝对路径,很多人写成 php think queue:work 结果 supervisor 找不到 think 文件或工作目录不对导致配置加载失败。

Redis 驱动特殊配置

ThinkPHP 的 Redis 队列配置里,retry_after 默认是 60 秒,任务执行超过这个时间哪怕没报错也会被 Redis 标记为已过期。block_for 控制 BRPOP 阻塞等待时长,设太短会导致频繁空轮询,建议和--sleep 对齐都设为 3。如果任务本身可能耗时较长如导出大 Excel,必须调高 retry_after 同时确保 max-jobs 不太小,否则进程还没跑完就被 supervisor 杀掉。Redis 驱动下 failed_jobs 表没写入不是队列没配好,而是 Redis 驱动默认行为和数据库驱动不同,它靠 retry_after 时间戳判断是否超时失败而不是靠抛异常次数。

注意事项

第一,--queue 参数要和你投递任务时指定的队列名一致如 default、email,否则消费端收不到任务。第二,务必加--env=production 避免开发环境配置如日志级别、缓存驱动被误加载。第三,--sleep=3 表示空闲时每 3 秒轮询一次,太小加重 Redis 压力,太大延迟高。第四,部署后任务不触发消费需检查 retry_after 和 block_for 配置。第五,supervisor 配置里 command 必须带完整路径和明确参数,实际要锁定 PHP 解释器路径、项目根目录、队列连接名和超时策略。

参考来源

来源:CSDN 博客 - ThinkPHP6 消息队列避坑指南:从安装到 Supervisor 守护进程的全流程解析(2026 年 2 月 21 日)

来源:知乎/技术博客 - ThinkPHP 集成队列任务 Queue_服务器后台消费进程部署实践(2026 年 4 月 12 日)

来源:CSDN 博客 - Supervisor 从入门到实战:守护进程管理全解析(2025 年 3 月 10 日)

来源:GitHub/技术社区 - thinkphp 队列+supervisor 实践(2018 年 9 月 21 日)

原文链接:https://www.zjcp.cc/ask/9610.html

http://www.jsqmd.com/news/753350/

相关文章:

  • 深入浅出 Model Context Protocol (MCP):连接 AI 与外部数据的桥梁
  • 3分钟快速上手:终极窗口强制调整工具WindowResizer完整指南
  • WPF call webHttpBinding from WCF
  • Arm CoreLink CI-700缓存一致性互连架构与优化实践
  • 从毛玻璃到亚克力:用Qt 6.5在Windows 11上实现现代化半透明UI效果
  • 你的Python项目依赖真的干净吗?从‘packaging‘缺失聊聊pyproject.toml和现代包管理
  • cppm证书到底要不要考?含金量怎么样?全在这了 - 众智商学院课程中心
  • Win2008 R2靶场搭建与渗透保姆级复盘:DedeCMS、phpMyAdmin那些年我们踩过的坑
  • 深入浅出:大语言模型 Agent 的工作原理与应用
  • 长期使用 Taotoken 聚合 API 对项目运维复杂度的实际降低感受
  • 丁于洲博士受聘上海中医药大学平顶山医院中医临床特聘专家
  • 2026 全国防水公司 TOP5 权威排名 - 防水百科
  • 基于Godot引擎的FPS游戏框架:模块化设计与核心系统实现
  • RT-Thread Studio里那个不起眼的‘RT-Thread Settings’,到底藏了多少宝藏?
  • 别再只盯着LVS报错!从版图到网表的‘翻译’过程,才是芯片设计不翻车的核心
  • 2026年4月市场专业的报告自动生成企业口碑推荐,制造业实验室管理系统/实验室智能化,报告自动生成企业找哪家 - 品牌推荐师
  • 抖音内容获取架构解析:模块化下载器的设计哲学与实践
  • 从2D地图到3D地球:用Cesium Entities API 快速构建你的第一个三维地理围栏(附完整代码)
  • 2026年目前消防泵直销厂家,排污泵/稳压泵/无负压供水设备/玻璃钢水箱/恒压变频供水设备/软化水箱,消防泵厂家哪家好 - 品牌推荐师
  • AI Agent 与 MCP 协议:构建标准化大模型交互的新范式
  • 2026年4月优秀的管线管品牌口碑推荐,Q355E无缝钢管/高温高压锅炉管/锅炉管,管线管源头厂家推荐 - 品牌推荐师
  • 告别卡顿!手把手教你用Linux解包修改Android手机的vendor.img,精简预装App
  • WCF binding webHttpBinding is used to web browser in json format both in request and response
  • 2026届必备的降重复率网站横评
  • A08.使用WAF对金戈企业网站进行安全防护
  • 罗技PUBG鼠标宏压枪脚本:快速提升射击精准度的终极指南
  • 别再傻傻print了!用tqdm给你的Python脚本加个进度条(附Jupyter Notebook实战)
  • LangChain RAG开发套件:集成多模型与高级检索的快速构建指南
  • 新手工程师必看:手把手教你搞定TMS320F280049最小系统电源与晶振设计(附原理图)
  • 创业团队如何利用 Taotoken 多模型能力优化产品 AI 功能