在 Ubuntu 上 PHP-FPM 慢 的原因通常可以归为几大类:配置不合理、资源瓶颈、代码问题、系统/环境限制。下面按常见程度给你梳理,并给出排查方法。
pm 模式设置不合理PHP-FPM 有三种进程管理方式:
staticdynamic(默认)ondemand常见错误:
pm.max_children 太小 → 请求排队ondemand 在突发流量时启动慢查看:
grep -R "pm" /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
看 PHP-FPM 状态页或日志:
sudo tail -f /var/log/php*-fpm.log
如果有:
server reached pm.max_children
说明 进程不够用。
top
htop
PHP 慢通常表现为:
php-fpm 进程 CPU 高load average 高可能原因:
free -h
swapon --show
如果开始用 swap,PHP-FPM 会明显变慢。
编辑:
/etc/php/*/fpm/pool.d/www.conf
开启:
slowlog = /var/log/php-fpm-slow.log
request_slowlog_timeout = 2s
重启:
systemctl restart php*-fpm
然后看:
tail -f /var/log/php-fpm-slow.log
能直接看到 哪一行代码慢。
file_get_contents() 外网请求json_encode/decode 大数据sleep()sudo tail -f /var/log/mysql/mysql-slow.log
或:
SHOW PROCESSLIST;
iostat -x 1
如果是云服务器:
php -m | grep opcache
如果没有:
sudo apt install php-opcache
确认:
opcache.enable=1
opcache.memory_consumption=128
ulimit -n
太低会导致连接失败或变慢。
listen = /run/php/php-fpm.sock
你可以按顺序查:
php-fpm.log 有没有 max_childrenslowlogtop 看 CPUfree -h 看内存如果你愿意,可以告诉我:
我可以直接帮你 看配置、给优化方案。