在 CentOS 上排查 PHP 慢请求,一般从 PHP-FPM 慢日志、Nginx/Apache 访问日志、PHP 自身日志 三个方向入手。下面按最常用、最有效的顺序说明。
如果你用的是 PHP-FPM(最常见),CentOS 上默认就支持慢日志。
php --version
# 例如 php 7.4
vim /etc/php-fpm.d/www.conf
在 www.conf 中确认或修改:
request_slowlog_timeout = 2s
slowlog = /var/log/php-fpm/www-slow.log
含义:
/var/log/php-fpm/www-slow.logsystemctl restart php-fpm
tail -f /var/log/php-fpm/www-slow.log
示例内容:
[20-Oct-2024 10:12:33] [pool www] pid 12345
script_filename = /var/www/html/index.php
[0x00007f...] sleep() /var/www/html/index.php:20
可以清楚看到:
如果你用的是 Nginx:
log_format main '$remote_addr - $request_time - $upstream_response_time $request';
tail -f /var/log/nginx/access.log
关注:
$request_time 大(整体慢)$upstream_response_time 大(PHP 慢)例如:
1.2.3.4 - 5.321 - 5.300 GET /api/user
说明 PHP 处理了 5 秒。
和上面 php-fpm 配置一样。
tail -f /var/log/httpd/access_log
vim /etc/php.ini
确保开启:
log_errors = On
error_log = /var/log/php/php-error.log
查看:
tail -f /var/log/php/php-error.log
# 实时看慢请求
tail -f /var/log/php-fpm/www-slow.log
# 看访问是否慢
tail -f /var/log/nginx/access.log
# 系统资源
top
htop
sleep() / 外部 API 超时如果你愿意,可以告诉我:
我可以直接帮你写一份可用的配置文件。