处理 PHP 应用时,日志定位往往是排查问题的第一步。CentOS 上 PHP-FPM 的日志怎么找、怎么看、怎么用,这份指南里基本都涵盖了。

日志位置与类型
常见的日志路径和用途大概有这些,不过具体还得看安装方式和发行版,会有一些细微差别:
- /var/log/php-fpm/error.log:PHP-FPM 运行期的主要记录,启动失败、报错、告警都在这里。
- /var/log/php-fpm/access.log:按请求记录脚本的执行情况,前提是
access.log配置已开启。 - /var/log/php-fpm/slowlog.log:慢脚本的专属日志,需要同时启用
slowlog和request_slowlog_timeout。 - 如果用
mod_php,PHP 错误会跑到/var/log/httpd/error_log里;如果是 PHP-FPM + Nginx,那 Nginx 的错误日志也得留意,通常在/var/log/nginx/error.log。 - 实在不确定日志在哪?用
php --ini找到php.ini,查一下error_log配置项就行。或者直接用journalctl -u php-fpm看 systemd 日志。
快速定位与常用命令
实时查看与检索
- 想实时盯着错误日志的变化?
tail -f /var/log/php-fpm/error.log就能搞定。 - 关键字检索也很直接:
grep -i “error|warning|fatal” /var/log/php-fpm/error.log。 - 按时间窗口统计错误数(比如统计 2025-12-05 10:00 到 11:00 之间的错误):
awk ‘/2025-12-05 10:00:*/,/2025-12-05 11:00:*/’ /var/log/php-fpm/error.log | grep -i error | wc -l
慢请求定位
- 列出慢日志里执行时间超过阈值的条目(以阈值 5 秒为例,字段索引得按日志格式调整):
awk ‘$4 > 5 {print}’ /var/log/php-fpm/slowlog.log
访问特征分析
- 提取访问日志中的 POST 请求目标:
grep -oP ‘POST \K[^ ]+’ /var/log/php-fpm/access.log - 统计哪些页面访问量最高(按路径第 3 段聚合):
awk ‘{print $7}’ /var/log/php-fpm/access.log | cut -d’/’ -f3 | sort | uniq -c | sort -nr
服务与系统日志联动
- 查看 PHP-FPM 服务日志:
journalctl -u php-fpm -f
有一点要提醒:命令里的字段索引和分隔符都跟你实际的 access.log 格式挂钩,最好先用 head 看看样本行再调参数。
常见错误模式与处置要点
- 502 Bad Gateway:多半是 PHP-FPM 没启动、崩溃了,或者监听地址/端口跟 Web 服务器对不上。先
systemctl status/restart php-fpm检查状态,再核对listen = 127.0.0.1:9000与 Nginx/Apache 的 FastCGI 配置是否一致。 - 504 Gateway Timeout:脚本执行超时,或者进程/资源不够用。可以调整
request_terminate_timeout或 pool 的request_timeout,同时适当提升pm.max_children,并对慢脚本做优化。 - Primary script unknown:常见于 Nginx 没有正确传递
SCRIPT_FILENAME。确保fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;配置正确,且root路径指向无误。 - 进程池耗尽(pm.max_children reached):并发请求超过了上限。结合内存和负载情况调大
pm.max_children,或者改用dynamic/ondemand模式,同时优化应用本身。 - Allowed memory exhausted:内存超出限制。适当提升
memory_limit,但别忘了从代码和查询入手优化。 - 文件权限问题:PHP-FPM 运行用户对脚本或目录没有权限。校正
user/group和目录权限,必要时设置listen.owner/listen.group。 - PHP-FPM 无法启动/端口冲突:配置错误或端口被占用。先用
php-fpm -t校验配置,再查端口占用和日志细节。
配置与运维建议
确保错误能被记录与定位
在 php.ini 里开启:error_reporting = E_ALL、log_errors = On,并设置 error_log。生产环境建议 display_errors = Off,防止信息泄露。
启用慢日志以发现性能瓶颈
在 www.conf(或对应 pool)中开启:slowlog = /var/log/php-fpm/slowlog.log、request_slowlog_timeout = 5(单位秒,可按业务调整)。
变更生效与持续监控
修改配置后执行 systemctl restart php-fpm。日常用 tail -f、grep、awk 或 journalctl -u php-fpm 持续观察。
日志轮转与容量控制
用 logrotate 对 php-fpm.log、error.log、slowlog.log 做按日切割并设定保留策略,避免磁盘被日志打满。