在 Ubuntu 上 PHP-FPM 响应变慢通常是多个因素叠加的结果。下面按常见原因 → 排查方式 → 解决建议来系统说明。
PHP-FPM 使用 pm 模式管理进程:
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
如果并发请求 > pm.max_children,请求就会排队,表现为:
排查
tail -f /var/log/php*-fpm.log
看到类似:
server reached pm.max_children
解决
pm.max_childrenpm = static
pm.max_children = 20
request_terminate_timeout = 30s
如果脚本执行慢,会被杀掉或阻塞。
PHP-FPM 自带慢执行日志:
slowlog = /var/log/php-fpm-slow.log
request_slowlog_timeout = 2s
重启后:
tail -f /var/log/php-fpm-slow.log
你会看到:
✅ 这是定位“代码慢”的最直接方式
常见问题:
file_get_contents(http://...)json_encode/decode建议
即使 PHP 很快,MySQL 慢也会让 FPM 看起来慢。
排查
SHOW PROCESSLIST;
或开启:
slow_query_log = 1
long_query_time = 1
解决
SELECT *free -h
如果大量使用 swap,PHP-FPM 会非常慢。
top
htop
看是不是:
iostat -x 1
日志写太多、session 文件频繁读写会导致变慢。
默认:
session.save_handler = files
高并发时:
/var/lib/php/sessions IO 高建议
session.save_handler = redis
listen = /run/php/php8.2-fpm.sock
检查:
; 生产环境必须关
xdebug.mode=off
php-fpm.log 看是否 max_childrenslowlogSHOW PROCESSLISTtop / free / iostat如果你愿意,可以告诉我:
我可以帮你精准定位并给出配置示例。