ThinkPHP作为PHP框架,其性能监控需结合框架自身工具与Linux系统工具,覆盖代码层、系统层及应用层的全链路监控。以下是具体实施方法:
ThinkPHP内置日志模块,可通过配置记录请求时间、错误信息等,为性能分析提供基础数据。
config/log.php中设置日志存储路径、级别及类型(推荐file类型,便于Linux下查看):return [
'type' => 'file',
'path' => runtime_path('log'), // 日志存储到runtime/log目录
'level' => ['info', 'error'], // 记录info及以上级别日志
'apart_level' => [], // 不单独记录的级别
];
\think\facade\Log记录请求耗时、内存占用:namespace app\controller;
use think\facade\Log;
class Index {
public function index() {
$start = microtime(true);
// 业务逻辑...
$cost = microtime(true) - $start;
Log::info("请求耗时:{$cost}秒,内存占用:".memory_get_usage()/1024/1024."MB");
return 'Hello ThinkPHP';
}
}
通过中间件拦截请求,统一记录每个请求的执行时间及资源消耗,适用于批量监控。
php think make:middleware PerformanceMonitor生成中间件文件,在app/middleware/PerformanceMonitor.php中编写逻辑:namespace app\middleware;
use think\facade\Log;
class PerformanceMonitor {
public function handle($request, \Closure $next) {
$start = microtime(true);
$response = $next($request);
$cost = microtime(true) - $start;
Log::info("请求[{$request->method()} {$request->path()}]耗时:{$cost}秒");
return $response;
}
}
app/middleware.php中全局注册(或指定路由注册):return [
\app\middleware\PerformanceMonitor::class,
];
ThinkPHP内置Profiler(性能分析器),可记录SQL执行、函数调用、内存分配等详细信息,帮助定位性能瓶颈。
config/app.php中设置app_debug为true(仅开发环境开启),访问页面时底部会显示Profiler面板,包含:
通过Composer安装第三方监控库(如Datadog、New Relic),实现更专业的性能数据收集与可视化。
composer require datadog/php-datadogstatsd;config/datadog.php(包含agent地址、命名空间等);app/provider/DatadogServiceProvider.php)绑定DogStatsd实例;$datadog = app('datadog');
$datadog->timing('app.request.time', $cost); // 记录请求时间
$datadog->increment('app.requests.count'); // 记录请求数
ThinkPHP运行在Linux系统上,需通过系统工具监控底层资源(CPU、内存、磁盘、网络),定位系统级瓶颈。
top:默认显示CPU、内存使用率及进程列表,按M(内存)、P(CPU)排序,查看ThinkPHP进程的资源占用;htop(需安装):更友好的交互式工具,支持颜色高亮、快捷键操作(如F5查看进程树)。通过vmstat查看系统整体状态(CPU、内存、IO、进程),每1秒刷新一次:
vmstat 1
r(运行队列长度,>CPU核心数则过载)、us(用户态CPU使用率)、sy(内核态CPU使用率)、free(空闲内存)、si/so(内存交换次数,频繁交换则内存不足)。使用iostat(需安装sysstat包)查看磁盘读写情况,识别IO瓶颈:
iostat -x 1
%util(磁盘利用率,>70%则繁忙)、await(平均IO等待时间,>10ms则慢)、r/s/w/s(每秒读/写请求数)。sar(System Activity Reporter)可收集、报告系统活动数据,支持查看历史趋势:
sar -u 1 3 # 查看CPU使用率(1秒1次,共3次)
sar -r 1 3 # 查看内存使用情况
sar -d 1 3 # 查看磁盘IO情况
sar -A > sar.log),用于分析过往性能问题。pidstat(sysstat包)可监控指定进程的资源使用情况,精准定位ThinkPHP进程的问题:
pidstat -p <ThinkPHP进程ID> 1 3
%CPU(进程CPU占用)、%MEM(进程内存占用)、kB_rd/s/kB_wr/s(进程磁盘读写速率)。若ThinkPHP进程出现卡顿、无响应,可通过strace跟踪其系统调用,查看阻塞点:
strace -p <ThinkPHP进程ID> -T -tt
-T显示调用耗时,-tt显示时间戳;ThinkPHP通常搭配MySQL等数据库,数据库性能直接影响应用表现,需额外监控:
slow_query_log=1,long_query_time=1);EXPLAIN命令,查看执行计划(索引使用情况、扫描行数);通过以上方案,可实现ThinkPHP在Linux环境下的全链路性能监控,从代码层到系统层定位性能瓶颈,保障应用稳定运行。