centos php如何进行故障排查
导读:CentOS 上 PHP 故障排查实战手册 一 快速定位路径与日志 先确认运行形态:是 Apache + mod_php,还是 Nginx + PHP-FPM。 常见日志位置与用途如下(按组件区分): 组件 日志路径 主要用途...
CentOS 上 PHP 故障排查实战手册
一 快速定位路径与日志
- 先确认运行形态:是 Apache + mod_php,还是 Nginx + PHP-FPM。
- 常见日志位置与用途如下(按组件区分):
| 组件 | 日志路径 | 主要用途 |
|---|---|---|
| PHP-FPM | /var/log/php-fpm/error.log | FPM 进程启动、运行错误、慢请求等 |
| PHP-FPM Pool | 通常在 /var/log/php-fpm/www-error.log(路径由 pool 配置决定) | 具体 PHP 脚本运行错误,含文件与行号 |
| PHP-FPM Slow Log | 由 slowlog 指定(常见如 /var/log/php-fpm/www-slow.log) | 超过阈值的慢请求堆栈 |
| Apache | 访问:/var/log/httpd/access_log;错误:/var/log/httpd/error_log | 请求与 Apache 层错误 |
| Nginx | 访问:/var/log/nginx/access.log;错误:/var/log/nginx/error.log | 请求与 Nginx 层错误 |
| systemd | 使用 journalctl -u php-fpm 或 journalctl -u httpd | 服务启动失败、崩溃、重启等系统日志 |
- 实时查看与检索示例:
- 实时看 FPM 日志:tail -f /var/log/php-fpm/error.log
- 检索 FPM 错误:grep -i “error|fatal” /var/log/php-fpm/error.log
- 查看服务日志:journalctl -u php-fpm -xe、journalctl -u httpd -xe
- 若使用 PHP-FPM,建议同时检查 www-error.log 与 slowlog,能快速定位脚本与性能瓶颈。
二 服务与连通性检查
- 确认服务状态与端口/套接字:
- 查看与重启:systemctl status|restart php-fpm;systemctl status|restart httpd(或 nginx)
- 监听信息:ss -lntp | grep ‘:9000|:9001|php-fpm’(FPM 常见监听 127.0.0.1:9000 或 /run/php-fpm.sock)
- Web 服务器与 PHP 的集成要点:
- Apache + mod_php:确认模块加载(如 libphp 模块)与 .php 解析配置生效。
- Nginx + PHP-FPM:检查 fastcgi_pass 是否指向正确的 地址:端口 或 unix socket,并确保 index.php 被正确处理。
- 典型症状与处理:
- 访问 .php 文件被下载而非执行:多为 Web 服务器未正确将 PHP 交给解释器,需修正 Apache/Nginx 的 PHP 处理配置。
- 502/504 错误:多为 PHP-FPM 未启动、监听地址/套接字不匹配、或 进程耗尽/超时,应结合 FPM 日志与监听状态排查。
三 配置与权限检查
- PHP 运行时配置(php.ini):
- 建议生产环境:error_reporting = E_ALL;display_errors = Off;log_errors = On;error_log = /var/log/php-fpm/error.log(路径需与运行用户可写一致)
- 修改后重启对应服务(php-fpm 或 httpd)使配置生效。
- FPM Pool 配置(如 www.conf):
- 核对 user/group、listen(端口或 socket)、pm.max_children、request_terminate_timeout、以及慢日志 slowlog 与 request_slowlog_timeout 是否开启并指向可写路径。
- 文件与目录权限:
- Web 可访问目录与文件应具备合适权限(如 755/644),FPM 运行用户需对相关目录有读写权限,避免因权限不足导致白屏或写入失败。
- SELinux 与防火墙:
- SELinux 可能阻止 PHP/FPM 访问文件或网络,必要时可临时设为 permissive 验证是否为 SELinux 问题:setenforce 0(验证后请恢复为 enforcing 并做策略修正)。
- 防火墙放行对应端口(如 80/443,或 FPM 监听端口)。
四 常见症状与对应排查路径
- 白屏或页面无输出:
- 开启并记录错误日志(php.ini 的 log_errors 与 error_log),优先查 PHP-FPM 错误日志 与 www-error.log;确认 display_errors 在生产应为 Off,避免信息暴露。
- 500 内部服务器错误:
- 依次查看 Nginx/Apache error_log → PHP-FPM error.log → www-error.log;常见原因包括语法错误、扩展缺失、权限问题、超时等。
- .php 被下载而非执行:
- 检查 Apache/Nginx 的 PHP 解析配置是否正确,必要时修正 FilesMatch .php$ 或 fastcgi_pass 指向。
- 502 Bad Gateway / 504 Gateway Timeout:
- 多为 PHP-FPM 未运行/崩溃、监听不匹配、进程池耗尽、或 脚本执行超时;结合 FPM error.log、slowlog 与 systemd 日志定位。
- 性能慢或偶发超时:
- 开启并分析 slowlog,定位耗时函数/SQL;结合 FPM 进程与数据库/缓存状态综合判断。
五 日志管理与长期优化
- 日志轮转与容量控制:
- 使用 logrotate 管理 PHP-FPM 与 Web 服务日志,按日/大小轮转并压缩,避免磁盘被占满(示例配置可针对 /var/log/php-fpm.log 设置 daily、rotate、compress 等策略)。
- 集中化与可视化分析:
- 小规模可用 grep/awk 做关键字统计;中大型建议引入 ELK Stack(Elasticsearch/Logstash/Kibana) 或 LogAnalyzer 做统一检索、图表与告警。
- 变更与回滚:
- 调整 php.ini / FPM 配置 后务必重启服务并观察日志;对关键参数(如内存、超时、进程数)建议灰度变更并保留回滚方案。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos php如何进行故障排查
本文地址: https://pptw.com/jishu/776612.html
