温馨提示×

Linux服务器上ThinkPHP性能监控工具

小樊
44
2025-12-20 08:49:24
栏目: 云计算

Linux服务器上ThinkPHP性能监控工具与落地方案

一、工具选型与适用场景

工具 类型 关键能力 典型场景 成本
ThinkPHP 内置日志 + 自定义中间件 应用内 记录请求耗时、内存峰值、错误堆栈;快速落地 开发/预发/生产的基础可观测性 免费
Prometheus + Grafana 开源监控 自定义指标、拉取式采集、可视化与告警 需要长期趋势、容量规划与自托管监控 免费
Datadog APM 商业SaaS 全栈监控、自动发现、分布式追踪、丰富告警 企业级可观测、统一平台 付费
New Relic APM 商业SaaS 代码级性能分析、事务追踪、慢SQL分析 深度性能瓶颈定位 付费
Linux 系统工具(top/htop/vmstat/iostat/netstat) 系统层 CPU/内存/IO/网络瓶颈快速定位 与应用指标联动排查 免费
数据库监控(MySQL慢查询、PMM) 数据层 慢查询日志、执行计划、连接与缓存命中 SQL与索引优化 开源/商业
Supervisor 进程守护 进程保活、崩溃自动重启、日志归集 CLI/队列/常驻进程稳定性 免费
XHProf / DebugBar 开发期剖析 函数级耗时、调用图、SQL与模板统计 开发/测试环境瓶颈定位 免费
以上工具覆盖了从应用、系统到数据库的全链路监控与剖析,可按环境与预算灵活组合。

二、快速落地步骤

  • 应用内打点与日志

    • 配置日志(示例):
      • 单通道文件日志(适配多版本):
        • 路径:config/log.php
        • 配置:
          • ‘default’ => ‘file’,
          • ‘channels’ => [‘file’ => [‘type’ => ‘file’, ‘path’ => runtime_path(‘log’), ‘level’ => [‘error’,‘warn’,‘info’]]]
      • 或旧版数组配置(如存在):
        • ‘log’ => [‘type’=>‘file’,‘var_log_path’=> ‘./runtime/log’,‘level’=>[‘info’,‘debug’,‘warn’,‘error’]]
    • 自定义性能中间件(记录耗时与内存):
      • 文件:app/middleware/PerformanceMiddleware.php
      • 代码示例:
        • namespace app\middleware; use think\facade\Log; class PerformanceMiddleware { public function handle($request, \Closure $next) { $start = microtime(true); $response = $next($request); $cost = microtime(true) - $start; $mem = memory_get_peak_usage(true)/1024/1024; Log::info(“path={$request->path()} cost={$cost}s mem={$mem}MB”); return $response; } }
      • 注册中间件(全局生效):
        • 单应用:app/middleware.php 返回 [‘app\middleware\PerformanceMiddleware::class’]
        • 多应用(如存在):application/middleware.php 返回 [‘app\middleware\PerformanceMiddleware’]
    • 效果:日志写入 runtime/log,便于 tail/grep/ELK 分析慢请求与异常。
  • 开源指标监控 Prometheus + Grafana

    • 在应用中通过中间件/扩展暴露 /metrics(如 think-prometheus),采集请求数、耗时、错误率等。
    • Prometheus 配置抓取目标(prometheus.yml 片段):
      • scrape_configs:
        • job_name: ‘thinkphp’ static_configs:
          • targets: [‘<你的服务器IP>:<暴露端口>’]
    • Grafana:添加 Prometheus 数据源,导入社区 ThinkPHP Dashboard,展示 QPS、P95/P99、错误率 趋势与分布。
  • 商业 APM Datadog / New Relic

    • Datadog
      • 安装 Agent;Composer 引入 datadog/php-datadogstatsd
      • 记录指标示例:
        • $datadog = app(‘datadog’);
        • $datadog->timing(‘thinkphp.controller.index.time’, microtime(true)-$start);
        • $datadog->increment(‘thinkphp.controller.index.requests’);
    • New Relic
      • 安装 New Relic PHP Agent,配置应用名与许可证;
      • 控制台查看响应时间、吞吐量、慢事务/慢SQL与错误分析。

三、系统层与数据库联动排查

  • Linux 常用命令
    • top/htop:实时查看 CPU/内存 占用,定位高负载进程(如 php-fpm)。
    • vmstat 1:关注 r(运行队列)、free(空闲内存)、si/so(换入换出)
    • iostat -x 1:磁盘 %util、await,识别 IO 瓶颈。
    • netstat -tulnp / ss:连接状态与端口占用,排查高并发网络问题。
  • 数据库监控
    • MySQL 慢查询日志:开启 slow_query_log,分析超时 SQL;
    • EXPLAIN 检查是否全表扫描/缺失索引
    • 使用 Percona PMM 等工具监控查询频率、连接数、缓存命中率

四、进程守护与开发期剖析

  • 进程守护 Supervisor(适用于 CLI/队列/常驻进程)
    • 安装:sudo apt-get install supervisor
    • 配置示例(/etc/supervisor/conf.dphp.conf):
      • [program:thinkphp]
      • command=php /path/to/yourphp/project think queue:work --queue=default --tries=3
      • directory=/path/to/yourphp/project
      • autostart=true
      • autorestart=true
      • user=www-data
      • redirect_stderr=true
      • stdout_logfile=/var/logphp.out.log
      • stderr_logfile=/var/logphp.err.log
    • 生效:sudo supervisorctl reread && sudo supervisorctl update && sudo supervisorctl start thinkphp:*
  • 开发期剖析工具
    • XHProf / Tideways:函数级耗时与内存开销分析,定位热点函数与调用路径。
    • DebugBar:开发环境实时查看请求时间、内存、数据库查询等(仅用于开发/测试)。

五、落地组合建议

  • 低成本起步:应用内日志+中间件 + Linux 工具 + MySQL 慢查询,快速建立可观测基线。
  • 可视化与告警:引入 Prometheus + Grafana,统一展示QPS、P95/P99、错误率,配置阈值告警。
  • 企业级全栈:接入 Datadog / New Relic APM,获得分布式追踪、代码级剖析、自动发现SLA 告警
  • 稳定性保障:使用 Supervisor 守护队列/常驻进程,异常自动拉起并集中日志。

0