在 Debian 上 PHP 运行慢,通常不是“PHP 本身慢”,而是环境配置、扩展、系统资源或代码问题叠加导致的。下面按最常见 → 较少见的顺序,系统梳理原因和排查方法。
Debian 常见 PHP 运行方式:
| 模式 | 性能 | 说明 |
|---|---|---|
mod_php |
一般 | Apache 内嵌,老方案 |
php-fpm |
✅ 推荐 | 快、稳定 |
CGI |
❌ 慢 | 每次请求都启动进程 |
✅ 正确做法:
apt install php-fpm
Nginx / Apache 使用 php-fpm
检查:
ps aux | grep php-fpm
PHP 是解释型语言,不开 OPcache 会慢数倍。
检查:
php -m | grep opcache
开启(Debian):
apt install php-opcache
/etc/php/*/fpm/php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
重启:
systemctl restart php-fpm
PHP 中只要有:
gethostbyname()mail()而 DNS 配置错误,就会卡 5 秒+
检查:
cat /etc/resolv.conf
✅ 推荐:
nameserver 8.8.8.8
nameserver 1.1.1.1
配置文件:
/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
查看是否满:
systemctl status php-fpm
iostat -x 1
或
top
看 %wa 是否很高
✅ 解决:
free -h
swapon --show
✅ 解决:
pm.max_childrenulimit -a
可能限制:
Nginx + PHP 很容易踩
display_errors = Off
log_errors = On
❌ 错误日志狂写 → 极慢
慢代码典型:
✅ 用:
常见慢函数:
glob()scandir() 大目录mail()preg_* 复杂正则# 1. PHP 模式
php -v
# 2. OPcache
php -i | grep opcache.enable
# 3. FPM 状态
systemctl status php-fpm
# 4. 资源
top
free -h
iostat -x 1
你可以告诉我:
cat /etc/os-release)我可以直接帮你给出一份最优配置。