在 Ubuntu 上 PHP-FPM 卡顿通常不是单一原因,而是“连接/进程/资源/代码”中某一环出了问题。下面按最常见 → 较少见的原因帮你系统梳理,并给出排查方法。
PHP-FPM 是进程模型,请求多了就排队。
表现:
request slow log 里有大量等待查看:
ps aux | grep php-fpm
看 www pool 的进程数是否长期满。
检查配置(/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
问题点:
pm.max_children 太小✅ 解决:
pm.max_childrenpm = static(高并发更稳)PHP 本身执行慢,不是服务器问题。
开启慢日志:
slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 2s
然后:
tail -f /var/log/php-fpm/www-slow.log
常见问题:
file_get_contents(http://...)PHP 卡,其实是 MySQL 卡。
检查:
mysqladmin processlist
看是否有:
✅ 解决:
SELECT *top
htop
free -h
如果:
✅ 解决:
pm.max_children尤其是:
检查:
iostat -x 1
✅ 优化:
session.save_handler = redis
Nginx 等 PHP 太久。
/etc/nginx/nginx.conf 或站点配置:
fastcgi_read_timeout 30s;
PHP-FPM:
request_terminate_timeout = 30s
如果用 socket:
listen = /run/php/php8.2-fpm.sock
确保 Nginx 用户能访问:
ls -l /run/php/
PHP 每次都重新编译。
检查:
php -i | grep opcache
✅ 开启:
opcache.enable=1
opcache.memory_consumption=128
PHP 里用了:
gethostbyname✅ 解决:
mail()你可以贴:
www.conf 配置我可以直接告诉你该改哪一行配置。