PHP队列消费进程卡住需先检查pcntl_fork是否被禁用AI请求须设硬超时Redis队列应使用BRPOPLPUSH防消息丢失systemd需调大MemoryLimit和RestartSec。PHP队列消费进程卡住不动先查pcntl_fork是否被禁用很多线上环境尤其是共享主机、Docker默认配置、部分云函数会禁用pcntl_fork而基于子进程的队列消费者比如用while(true) pcntl_fork实现的多工单处理一启动就静默退出日志里连错误都不报。实际表现是php worker.php执行后立刻返回进程列表里找不到它但也没有报错。用php -r var_dump(function_exists(pcntl_fork));确认是否可用禁用时别硬改换amqp扩展 RabbitMQ或redis的BRPOP阻塞模式更稳妥如果必须用pcntl检查disable_functions配置项是否含pcntl_fork,pcntl_waitpid等AI请求超时崩掉整个队列必须给file_get_contents或cURL设硬超时批量调AI接口最常见翻车点某个请求卡在TLS握手或响应慢导致当前worker进程挂起后续任务全堵住。PHP默认的file_get_contents没有内置超时控制除非显式配stream_context_createcURL也常漏设CURLOPT_TIMEOUT_MS。file_get_contents必须搭配stream_context_create关键参数timeout 8单位秒、http [method POST]cURL至少设三个超时CURLOPT_TIMEOUT_MS总耗时、CURLOPT_CONNECTTIMEOUT_MS建连、CURLOPT_LOW_SPEED_LIMIT防假死别信“AI服务稳定”实测OpenAI/千问/文心在高峰时段503或429响应延迟可达30sRedis队列用LPUSH BRPOP就行小心并发漏消息看似简单的LPUSH推任务、BRPOP拉任务在高并发写入多worker消费时可能因网络抖动或进程信号中断导致某条任务被BRPOP取走但没来得及处理就崩溃消息永久丢失。必须用BRPOPLPUSH代替BRPOP把任务先挪到processing:queue暂存链表处理完再LREM或LTRIM加EXPIRE给processing链表设10分钟过期避免worker宕机后任务卡死别用DEL清空队列——LRANGE LTRIM更安全避免清空过程中新任务插入被误删为什么systemd管理PHP队列进程老被杀盯紧MemoryLimit和RestartSec用systemd跑PHP长进程看似规范但默认MemoryLimit512M对批量AI请求极不友好——一次json_encode大响应体、或curl_exec缓存未清内存就飙到600Msystemd直接Kill进程且不记OOM日志。 文心快码 文心快码Comate是百度推出的一款AI辅助编程工具