温馨提示×

Linux系统中ThinkPHP性能监控

小樊
40
2025-12-24 06:35:46
栏目: 编程语言

Linux下ThinkPHP性能监控实战

一 监控目标与分层

  • 业务与接口:关注响应时间P95/P99、吞吐QPS、错误率、慢请求占比,定位到具体控制器/动作/SQL
  • 应用内部:记录方法级耗时、内存峰值、缓存命中率、队列长度等自定义指标。
  • 基础设施:跟踪CPU、内存、磁盘IO、网络、连接数、PHP-FPM进程健康度与饱和度。
  • 数据库与缓存:慢查询、锁等待、连接池使用、主从延迟、缓存命中与穿透。

二 快速落地步骤

  • 日志与链路
    • 统一日志到runtime/log,按日期/级别切分;生产关闭页面调试,仅保留必要日志字段(如request_id、controller、action、cost_ms、status、sql)。
    • 为每次请求生成唯一request_id,在日志与返回头透传,便于串联网关、应用、数据库与队列。
  • 系统与应用指标
    • 采集CPU、内存、磁盘IO、网络PHP-FPM状态(如pm.status_path),配合Nginx access/error日志计算HTTP状态码分布、Top慢URL
    • 在框架层埋点关键路径(中间件/控制器基类)记录开始时间、结束时间、异常,输出cost_ms、memory_peak、db_queries等。
  • 数据库与缓存
    • 打开慢查询日志并设置合理阈值;对Redis记录命中率、慢操作、大key
  • 告警与可视化
    • 将指标与日志送入时序库+可视化(如Prometheus+Grafana),对P95/P99、5xx率、慢查询、磁盘空间等配置阈值告警

三 关键指标与采集方法

维度 关键指标 采集方式 典型阈值或动作
应用 P50/P95/P99响应时间、QPS、错误率 Nginx日志分析、应用埋点 P95持续>1s或错误率>**1%**告警
应用 慢请求数、慢SQL数 应用埋点、DB慢查询日志 慢请求>**5%**触发排查
PHP-FPM 进程利用率、队列长度、慢请求 pm.status_path、php-fpm日志 队列>10或进程满负荷告警
系统 CPU、内存、磁盘IO、网络 node_exporter、系统监控 CPU>**80%**持续5分钟告警
数据库 慢查询、连接数、锁等待 MySQL慢查询日志、performance_schema 慢查询突增立即排查
缓存 命中率、慢操作 Redis INFO/慢日志 命中率<**90%**告警

四 工具与代码示例

  • 系统与应用基础监控
    • 实时查看进程与资源:top/htopiotopiftopvmstat 1netstat -sss -slsof -p <PID>
    • PHP-FPM状态:在php-fpm.conf启用pm.status_path = /status,用curl http://127.0.0.1/status?json采集;结合Nginx仅内网可访问。
    • Nginx日志分析:统计Top URL、状态码分布、P95耗时(按request_id可串联到应用日志)。
  • ThinkPHP日志与运行时间
    • 日志目录通常为runtime/log;确保目录与文件可写,并按天/级别轮转,便于分析与保留合规。
    • 在公共入口或中间件记录开始时间结束时间,计算cost_ms并写入日志/响应头;在ThinkPHP 3.2中可直接利用全局变量**$_beginTimememory_get_usage()**计算运行时长与内存占用,便于快速定位性能基线。
  • APM与指标上报
    • 使用Datadog等APM:安装composer require datadog/php-datadogstatsd,在服务提供者中绑定DogStatsd,在关键方法前后打点上报timing/histogram/counter,在控制台查看端点耗时分布、错误率与标签维度

五 压测与瓶颈定位

  • 压测与场景设计
    • 使用Apache JMeter创建并发用户、Ramp-up、循环等场景,模拟高峰流量;优先压测核心业务路径数据库读写链路,观察P95/P99、错误率、吞吐随并发的变化曲线。
  • 代码级性能分析
    • 在开发/预发环境使用XHProfDebugBar定位函数级耗时、调用次数、内存开销;对数据库查询进行专项分析,结合索引、SQL改写、减少N+1等手段优化,必要时引入缓存降低读放大。

0