在 Ubuntu 上 PHP-FPM 响应缓慢 通常是配置、资源、或上下游依赖的问题。下面按最常见原因 → 排查方法 → 解决建议来说明。
当并发请求超过 pm.max_children 时,请求会排队。
表现
load 不高,但响应时间长upstream timed out排查
sudo tail -f /var/log/php*/fpm.log
看到:
server reached pm.max_children
解决
sudo vim /etc/php/*/fpm/pool.d/www.conf
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
然后:
sudo systemctl restart php-fpm
使用 tcp 或 unix socket 配置不当。
推荐(更快)
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
检查
ls -l /run/php/
file_get_contents排查
sudo apt install php-xdebug
或简单加:
echo microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'];
PHP 很快,但 SQL 很慢。
排查
SHOW PROCESSLIST;
或开启慢查询日志。
PHP 中:
mail()gethostbyname()解决
mail()iostat -x 1
或
iotop
free -h
如果 swap 很高:
pm.max_childrentop
htop
request_terminate_timeout = 30s
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm-slow.log
查看慢日志:
tail -f /var/log/php-fpm-slow.log
pm.max_children 是否太小sudo apt install php-opcache
opcache.enable=1
opcache.memory_consumption=128
如果你愿意,可以告诉我:
我可以直接帮你给出精准配置。