晚上八点多,监控报警:接口大量 502。Nginx 错误日志里刷屏:
connect() to unix:/run/php-fpm/www.sock failed (11: Resource temporarily unavailable) while connecting to upstream
这个报错基本就是 PHP-FPM 的进程池被打满了,没有空闲 worker 处理新请求。
排查步骤
ps aux | grep php-fpm | wc -l看进程数,果然到了 pm.max_children 上限- 看 FPM slow log,找到执行时间长的脚本
- 发现有个导出接口,一次查几万条数据,单个请求跑几十秒
- 几个用户同时点导出,worker 全被占满
临时处理
# 重启 fpm 释放进程(会短暂中断,谨慎)
systemctl reload php-fpm
# 调大进程数(治标)
pm.max_children = 50
pm.max_requests = 500
根治
- 导出改异步:提交任务 → 队列处理 → 生成文件后通知下载
- 加超时:
request_terminate_timeout = 60s,避免脚本无限跑 - 接口限流,导出类接口单独限
- 慢日志持续监控,别等爆了才发现
FPM 配置经验值
pm = dynamic
pm.max_children = 内存 / 单进程平均内存
pm.start_servers = max_children / 4
pm.min_spare_servers = max_children / 4
pm.max_spare_servers = max_children / 2
pm.max_requests = 500 ; 防内存泄漏
502 不一定是 Nginx 的问题,先看 upstream 是谁,再顺着查。

Comments 3 条评论
导出接口拖垮 FPM 我们也遇到过
导出改异步确实是根治
先看 upstream 是谁,记住了