在 Debian 上 PHP 运行“慢”,原因通常可以归为以下几类。你可以对照排查:
opcache 未开启(最常见)Debian 默认可能没装或没启用 OPcache。
检查:
php -m | grep opcache
如果没有:
apt install php-opcache
php.ini 中建议:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
php-cli 而不是 php-fpmWeb 环境应使用 php-fpm,而不是 CGI/mod_php。
检查:
ps aux | grep php-fpm
Nginx / Apache 是否正确使用 fpm?
pm 配置不合理(php-fpm)/etc/php/*/fpm/pool.d/www.conf
常见错误:
pm = static
pm.max_children = 2 # 太少
建议:
pm = dynamic
pm.max_children = 20~50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
fastcgi_passfastcgi_buffering 异常示例(Nginx):
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php-fpm.sock;
}
PHP 慢,往往是 SQL 慢。
排查:
SHOW PROCESSLIST;
开启慢查询日志:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
new PDO()free -h
top
如果 Swap 很高,PHP 会非常慢。
iostat -x 1
foreach ($users as $u) {
$db->query("SELECT ..."); // ❌
}
应改为:
$db->query("SELECT ... WHERE id IN (...)");
requireDebian 稳定版可能还是 PHP 7.4 / 8.1
查看:
php -v
建议至少 PHP 8.1+
PHP 中如果用:
gethostbynamemail()会卡在 DNS。
测试:
dig example.com
top / free / iostat如果你愿意,可以告诉我:
cat /etc/os-release)我可以帮你精准定位。