温馨提示×

如何监控CentOS PHP应用性能

小樊
37
2025-12-11 11:42:23
栏目: 编程语言

监控目标与总体架构

  • 面向 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-fpmsudo tail -f /var/log/php-fpm/error.log
    • 实时资源与进程观测:top/htopps aux | grep phpss -tulpen | grep :9000(FPM 默认端口 9000)。
  • 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 等指标。
    • 访问日志分析:使用 GoAccess 生成可视化报告,定位高耗时与高频接口:
      • 安装:sudo yum install goaccess
      • 分析:goaccess /var/log/nginx/access.log -a
  • PHP-FPM 与慢请求
    • 在 FPM 池配置(如 /etc/php-fpm.d/www.conf)开启慢日志与请求时长记录:
      • 建议参数:slowlog = /var/log/php-fpm/www-slow.logrequest_slowlog_timeout = 5s
      • 重启:sudo systemctl restart php-fpm
    • 结合日志分析慢请求与异常:sudo tail -f /var/log/php-fpm/www-slow.log
  • 数据库慢查询
    • 启用 MySQL 慢查询日志,定位耗时 SQL:
      • 配置:slow_query_log = 1slow_query_log_file = /var/log/mysql/slow-query.loglong_query_time = 1
      • 重启 MySQL 后分析日志定位问题查询。

深入分析与 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/EFKLoki,基于关键词(如 5xx、Fatal、Slow)与阈值设置告警。
  • 指标与可视化
    • 使用 Prometheus 抓取 Nginx、PHP-FPM、Node/系统 指标,在 Grafana 构建 PHP 应用大盘(吞吐、延迟、错误、队列、数据库慢查询等),并设置 Alertmanager 阈值告警。

0