核心思路是让关了也不失控:通过进程模型加固(如Nginx启用master_process、Swoole/Workerman启用Manager进程)、信号治理(禁用kill -9、注册SIGTERM处理)和启动机制兜底(--init、systemd配置),实现Master崩溃后Worker自治或由中间层接管,并辅以崩溃耐受验证。
核心思路不是“防止误关”,而是让关了也不失控——通过进程模型加固、信号治理和启动机制兜底,把 Master 崩溃的影响控制在可收容范围内。
Master 不该是唯一权威。关键在于让 Worker 具备一定自治能力,或由更稳的中间层接管:
master_process off;否则整个服务退化为单进程,一杀全断,且无法优雅退出很多“误关”实际是信号误发(如 kill -9、systemctl kill、OOM Killer)。要让退出行为可控:
kill -9;生产环境应统一通过 service 管理(systemctl stop nginx)或管理命令(php start.php stop),这些会触发预设的优雅关闭流程onMasterStart 中调用 pcntl_signal(SIGTERM, 'shutdown'),确保收到 TERM 后主动通知 Worker 退出让 Worker 从诞生起就“认得清靠山”,降低脱离风险:
pcntl_waitpid 在后台持续运行;避免因 disable_functions 禁用 wait 相关函数导致回收失效别等线上出事才试。定期模拟 Master 异常退出,观察 Worker 行为:
kill -9 Master 进程,立即执行 ps -eo pid,ppid,comm | awk '$2==1',确认是否有 Worker 的 PPID 变为 1lsof -i :端口号,看连接是否还在、响应是否延迟,判断 Worker 是否已失去协调仍硬扛流量abnormal exit、orphaned、no master process found 等关键词,及时补漏配置或代码逻辑