在 Ubuntu 上 PHP 配置或请求变慢,通常不是单一原因,而是多个环节叠加。下面按最常见 → 较少见给你一个系统排查清单,并附上对应解决办法。
php-fpm 但配置不合理如果你是 Nginx + PHP-FPM(Ubuntu 默认方式):
慢点通常在:
pm 模式不对pm.max_children 太小request_terminate_timeout 太长检查:
ps aux | grep php-fpm
优化(示例):
; /etc/php/8.1/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
然后:
systemctl restart php8.1-fpm
PHP 慢的头号原因。
检查:
php -i | grep opcache
开启:
; /etc/php/8.1/fpm/php.ini
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
重启 PHP-FPM。
✅ 开启后通常快 3–10 倍
PHP 中只要有:
gethostbyname()mail()如果 DNS 慢,PHP 会卡住。
临时测试:
php -r "echo gethostbyname('localhost');"
解决:
sudo nano /etc/hosts
确保有:
127.0.0.1 localhost
::1 localhost
常见错误:
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
但 socket 不存在或权限不对。
检查:
ls -l /run/php/
Ubuntu 上 Apache + mod_php 比 FPM 慢很多。
✅ 建议换成:
Laravel:
php artisan config:cache
php artisan route:cache
php artisan optimize
Composer:
composer dump-autoload -o
PHP 本身很快,但 SQL 慢。
检查:
SHOW PROCESSLIST;
加索引、减少 N+1 查询。
iostat -x 1
如果是:
PHP 会“看起来慢”。
free -h
如果大量使用 SWAP:
pm.max_childrenphp -r "echo microtime(true);"
如果快 → 问题在 Web / DB
如果慢 → PHP 环境本身有问题
; www.conf
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm-slow.log
| 原因 | 是否常见 |
|---|---|
| OPcache 没开 | ⭐⭐⭐⭐⭐ |
| FPM 配置不合理 | ⭐⭐⭐⭐ |
| DNS 卡 | ⭐⭐⭐ |
| DB 慢 | ⭐⭐⭐ |
| 框架未优化 | ⭐⭐⭐ |
| 磁盘 IO | ⭐⭐ |
如果你愿意,可以告诉我:
我可以直接帮你给出精准配置。