温馨提示×

Ubuntu PHP如何监控性能

小樊
37
2025-11-28 19:37:38
栏目: 编程语言

Ubuntu 上监控 PHP 性能的可落地方案

一 系统层监控

  • 进程与资源总览:使用 htop 实时查看 CPU、内存、负载PHP-FPM 进程情况。
    命令:sudo apt-get install htop && htop
  • 综合资源监控:使用 nmon 观察 CPU、内存、磁盘、网络 的综合面板。
    命令:sudo apt-get install nmon && nmon
  • 虚拟内存与调度:vmstat(建议安装 sysstat)。
    命令:sudo apt-get install sysstat && vmstat 1
  • 磁盘与 I/O:iostat(来自 sysstat)。
    命令:sudo apt-get install sysstat && iostat -c -d 4
  • 历史与系统活动:sar(来自 sysstat)。
    命令:sudo apt-get install sysstat && sar -u 1
  • 多合一监控:glances
    命令:sudo apt-get install glances && glances
  • 快速定位思路:先用 htop/nmon 看整体负载与 PHP-FPM 进程数,再用 iostat 判断磁盘瓶颈,用 vmstat/sar 观察调度与内存压力。

二 PHP 运行时与 FPM 监控

  • PHP-FPM 状态页:在 /etc/php/{版本}/fpm/pool.d/www.conf 中启用 pm.status_path = /status,并在 Nginx 配置中对该路径做访问控制后访问 http://your_domain/status 查看 active processes、idle processes、requests per second 等关键指标。
  • FPM 进程管理:结合 pm.max_children、pm.start_servers、pm.min_spare_servers、pm.max_spare_servers、pm.max_requests 等参数与 htop 观察进程数变化,避免 max_children 过小导致排队或过大导致内存吃紧。
  • 慢请求日志:在 www.conf 中开启 slowlog = /var/log/php-fpm/slow.logrequest_slowlog_timeout = 5,定位执行时间超过阈值的脚本与调用栈。
  • Web 层与日志分析:用 goaccess 分析 Nginx/Apache 访问日志,观察 响应时间分布、Top URL、HTTP 状态码 等,辅助判断业务瓶颈与异常流量。
    命令:sudo apt-get install goaccess && goaccess /var/log/nginx/access.log -a

三 PHP 应用性能剖析

  • XHProf(轻量、低开销):
    1. 安装:sudo pecl install xhprof && echo "extension=xhprof.so" | sudo tee /etc/php/{版本}/mods-available/xhprof.ini && sudo phpenmod xhprof
    2. 代码示例:
    <?php
    xhprof_enable(XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);
    // ... 你的业务代码 ...
    $data = xhprof_disable();
    // 保存/上报 $data 用于可视化分析
    
  • Xdebug(功能全、开销大,建议仅用于开发/灰度):
    1. 安装:sudo apt-get install php-xdebug
    2. 配置 php.ini(示例):
    zend_extension=xdebug.so
    xdebug.mode=profile
    xdebug.output_dir=/tmp
    xdebug.profile_enable_trigger=1
    
    1. Webgrind/KCacheGrind 打开生成的 cachegrind 文件进行可视化分析。
  • Blackfire(专业 APM,适合线上低开销剖析):
    1. 安装客户端与代理,注册并获取 Server ID/Token
    2. 在应用环境安装 Blackfire 扩展并按指引配置;
    3. 通过 Blackfire CLI/Web Profiler 采集并分析性能瓶颈。

四 负载与压力测试

  • ApacheBench(快速 HTTP 压测):
    命令:ab -n 1000 -c 50 http://your_app/,观察 Requests per second、Time per request、Transfer rate 等指标。
  • JMeter(全功能压测):创建线程组与 HTTP 采样器,可模拟复杂链路与表单/文件上传等场景,并生成报告。
  • 建议流程:先用 ab/JMeter 制造稳定负载,再配合 XHProf/Blackfire 抓取热点函数与调用路径,最后回到 FPM/系统层 验证瓶颈是否已被解除。

五 落地配置与排障清单

  • 建议最小监控栈:
    • 系统层:htop + nmon + iostat + sar
    • PHP 层:PHP-FPM 状态页 + 慢日志
    • 应用层:XHProf 采样Blackfire(按环境选择)
    • 访问分析:goaccess
  • 关键指标与阈值示例:
    • PHP-FPM active/idle 长时间接近 pm.max_children 表示进程不足;
    • 慢日志 出现大量 >1s 的脚本需优先优化;
    • iostatawait/svctm 持续偏高说明磁盘 I/O 成为瓶颈;
    • ab/JMeter95th/99th 延迟升高但 QPS 不涨,多为后端/数据库瓶颈。
  • 安全与开销控制:
    • Xdebug 开销大,生产环境仅短时开启;
    • 状态页/剖析端点 需做 IP 白名单鉴权
    • 采样频率控制在 1%–5%,避免额外负载。

0