如何监控CentOS PHP应用性能
导读:监控目标与总体架构 面向 CentOS 上的 PHP-FPM + Nginx/Apache 应用,建议从四个层面建立可观测性: 基础设施与进程:CPU、内存、I/O、网络、PHP-FPM 进程与队列。 服务与网关:Nginx/Apach...
监控目标与总体架构
- 面向 CentOS 上的 PHP-FPM + Nginx/Apache 应用,建议从四个层面建立可观测性:
- 基础设施与进程:CPU、内存、I/O、网络、PHP-FPM 进程与队列。
- 服务与网关:Nginx/Apache 吞吐、连接、状态码、慢请求。
- 应用与数据库:PHP 执行性能、慢函数/调用图、数据库慢查询。
- 日志与告警:错误日志、FPM 日志、访问日志、业务日志的统一采集与阈值告警。
快速落地步骤
- 系统与应用基础
- 确认并启用 PHP-FPM 服务,查看状态与日志:
- 启动/开机自启:
sudo systemctl start php-fpm & & sudo systemctl enable php-fpm - 状态与日志:
sudo systemctl status php-fpm、sudo tail -f /var/log/php-fpm/error.log
- 启动/开机自启:
- 实时资源与进程观测:
top/htop、ps aux | grep php、ss -tulpen | grep :9000(FPM 默认端口 9000)。
- 确认并启用 PHP-FPM 服务,查看状态与日志:
- Web 层与访问分析
- 配置 Nginx 状态页(示例):
- 在 server 配置中添加:
location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; deny all; } - 访问
http://your_server_ip/nginx_status查看 Active connections、Reading、Writing、Waiting 等指标。
- 在 server 配置中添加:
- 访问日志分析:使用 GoAccess 生成可视化报告,定位高耗时与高频接口:
- 安装:
sudo yum install goaccess - 分析:
goaccess /var/log/nginx/access.log -a
- 安装:
- 配置 Nginx 状态页(示例):
- PHP-FPM 与慢请求
- 在 FPM 池配置(如 /etc/php-fpm.d/www.conf)开启慢日志与请求时长记录:
- 建议参数:
slowlog = /var/log/php-fpm/www-slow.log、request_slowlog_timeout = 5s - 重启:
sudo systemctl restart php-fpm
- 建议参数:
- 结合日志分析慢请求与异常:
sudo tail -f /var/log/php-fpm/www-slow.log
- 在 FPM 池配置(如 /etc/php-fpm.d/www.conf)开启慢日志与请求时长记录:
- 数据库慢查询
- 启用 MySQL 慢查询日志,定位耗时 SQL:
- 配置:
slow_query_log = 1、slow_query_log_file = /var/log/mysql/slow-query.log、long_query_time = 1 - 重启 MySQL 后分析日志定位问题查询。
- 配置:
- 启用 MySQL 慢查询日志,定位耗时 SQL:
深入分析与 APM 方案
- 代码级性能剖析
- XHProf/XHGui:安装 tideways_xhprof 扩展 + MongoDB + xhgui,对指定项目自动采集函数级耗时、调用图与火焰图,适合常态化采样与瓶颈定位。
- Blackfire:面向开发/预发环境的低开销采样分析,生成调用图与建议,便于快速定位热点路径。
- Xdebug:开发环境开启 profiler,生成 cachegrind 文件,用 Webgrind/KCacheGrind 可视化分析,定位慢函数与调用栈。
- 线上 APM 与全链路观测
- New Relic/Datadog:安装对应 PHP Agent,上报 响应时间、吞吐、错误、数据库/外部调用 等,结合 Prometheus + Grafana 做可视化与阈值告警,形成统一监控大盘。
关键指标与阈值建议
| 维度 | 关键指标 | 建议阈值/动作 |
|---|---|---|
| PHP-FPM | pm.max_children 利用率、进程队列、慢请求数 | 利用率长期 > 80% 或队列堆积:调大 pm.max_children / pm.start_servers / pm.min_spare_servers / pm.max_spare_servers;优化慢请求 |
| Nginx | Active connections、Reading/Writing/Waiting、5xx 比例 | 5xx 突增或 Waiting 持续偏高:检查后端 FPM 与数据库、优化慢接口 |
| 应用 | 平均响应时间、P95/P99、错误率 | P95 持续上升或错误率 > 1%:结合日志与 APM 定位瓶颈 |
| 数据库 | 慢查询数、查询耗时 | 开启慢查询日志,针对 TOP SQL 建立索引/改写;必要时分库分表 |
| 系统 | CPU、内存、I/O、网络 | CPU > 80% 持续 5 分钟或内存紧张:扩容实例、优化代码/SQL、启用缓存 |
告警与可视化
- 日志集中与告警
- 将 Nginx 访问/错误日志、PHP-FPM 日志、应用日志 统一采集到 ELK/EFK 或 Loki,基于关键词(如 5xx、Fatal、Slow)与阈值设置告警。
- 指标与可视化
- 使用 Prometheus 抓取 Nginx、PHP-FPM、Node/系统 指标,在 Grafana 构建 PHP 应用大盘(吞吐、延迟、错误、队列、数据库慢查询等),并设置 Alertmanager 阈值告警。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何监控CentOS PHP应用性能
本文地址: https://pptw.com/jishu/769826.html
