php-fpm 在 Linux 的错误处理机制
一 核心机制总览
二 关键配置与用途
| 机制/场景 | 主要配置项 | 作用与要点 |
|---|---|---|
| FPM 错误日志 | error_log、log_level | 记录 FPM 自身事件;级别含 alert/error/warning/notice/debug,生产常用 notice,排障可临时提升到 debug。 |
| 进程异常自恢复 | emergency_restart_threshold、emergency_restart_interval | 在指定时间窗内出现指定数量的 SIGSEGV/SIGBUS 时触发“优雅重启”,隔离崩溃进程。 |
| 请求超时控制 | request_terminate_timeout | 强制终止执行时间过长的请求;与 php.ini 的 max_execution_time 可能不一致,FPM 值优先用于 FPM 管理的请求。 |
| 慢请求诊断 | request_slowlog_timeout、slowlog | 超过阈值的请求会写入调用栈到慢日志,定位性能瓶颈与长 SQL/循环。 |
| 捕获脚本输出 | catch_workers_output = yes | 将 stdout/stderr 从 worker 进程捕获到 FPM 日志,便于发现未被 error_log 捕获的输出/错误。 |
| PHP 错误日志 | log_errors = On、error_log、display_errors = Off | 脚本错误写入指定文件;生产建议关闭前台显示,避免泄露敏感信息。 |
| 进程管理 | **pm = static | dynamic**、pm.max_children、pm.start_servers、pm.min_spare_servers、pm.max_spare_servers、pm.max_requests |
| 运行时观测 | pm.status_path、ping.path/ping.response | 状态与存活探测端点,配合监控/负载均衡健康检查。 |
| 配置校验与重载 | php-fpm -t、SIGUSR2 | 语法校验;发送 SIGUSR2 触发平滑重启,不中断现有连接。 |
三 日志与排障流程
php-fpm{version} -t,无误后重载服务:systemctl reload php{version}-fpm 或发送 SIGUSR2。tail -f /var/log/php{version}-fpm.log 或池级日志文件;四 安全与最佳实践