在 Ubuntu 上 PHP-FPM 响应缓慢通常是配置、资源、或上游依赖的问题。下面按「最常见 → 较少见」的顺序帮你系统排查。
PHP-FPM 默认进程很少,并发一高就排队。
查看:
ps aux | grep php-fpm
检查配置文件(通常在):
/etc/php/8.x/fpm/pool.d/www.conf
关键参数:
pm = dynamic
pm.max_children = 5 # 太小
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
建议(示例,4 核 8G):
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
修改后:
systemctl restart php8.x-fpm
Nginx 配置不当也会导致“看起来 PHP 慢”。
检查:
fastcgi_pass unix:/run/php/php8.x-fpm.sock;
确保:
测试:
curl -w "%{time_total}\n" http://localhost/test.php
排除法:
<?php
phpinfo();
如果这个很快 → 业务代码问题
常见问题:
SHOW PROCESSLIST;
或开启慢查询日志:
slow_query_log = 1
long_query_time = 1
典型原因:
top
htop
free -h
如果:
→ PHP-FPM 会被拖死
iostat -x 1
如果 %util 接近 100%:
request_terminate_timeout = 30s
如果业务慢,会被杀掉并重连,感觉“更慢”。
php -m | grep opcache
开启:
opcache.enable=1
opcache.memory_consumption=128
opcache.revalidate_freq=60
ls /var/lib/php/sessions | wc -l
解决:
你可以依次确认:
pm.max_children 是否太小如果你愿意,可以把下面信息发我,我可以直接帮你定位:
www.conf 的 pm 配置我可以给你一套精确优化方案。