简介:还在靠经验盲猜PHP代码性能瓶颈?本文汇总Xhprof、Blackfire、Tideways三大专业分析工具的一键安装配置步骤,搭配PHP原生microtime/memory_get_usage轻量监控方案,以及Laravel Debugbar框架级调试技巧。从函数级CPU内存采样、请求级火焰图分析到SQL查询耗时追踪,手把手教你快速定位N+1查询、高频冗余调用等核心性能问题,大幅提升应用响应速度
# 安装扩展
pecl install xhprof
# 启用扩展
echo "extension=xhprof.so" >> /etc/php.ini
echo "xhprof.output_dir=/tmp/xhprof" >> /etc/php.ini
# 重启 PHP-FPM
systemctl restart php-fpm
<?php
// 开始分析
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
// 你的代码
$users = User::with('posts')->get();
foreach ($users as $user) {
echo $user->name;
}
// 结束分析
$data = xhprof_disable();
// 保存数据
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($data, "myapp");
echo "http://xhprof.local/index.php?run={$run_id}&source=myapp";
分析报告:
Function Name Calls Time(ms) Memory(KB)
=====================================================
main() 1 1250 2048
User::with() 1 850 1024
DB::query() 100 750 512
json_encode() 50 80 256
安装:
# 安装 Agent
wget -O - https://packages.blackfire.io/gpg.key | apt-key add -
echo "deb http://packages.blackfire.io/debian any main" > /etc/apt/sources.list.d/blackfire.list
apt-get update
apt-get install blackfire-agent blackfire-php
# 配置
blackfire-agent --register
blackfire config
使用:
# 命令行分析
blackfire run php script.php
# Web 分析(浏览器插件)
# 安装 Chrome/Firefox 插件后,点击按钮即可
Laravel 集成
<?php
// 安装
composer require blackfire/php-sdk
// 使用
use Blackfire\Client;
use Blackfire\Profile\Configuration;
$blackfire = new Client();
$config = new Configuration();
$config->setTitle('My Profile');
$probe = $blackfire->createProbe($config);
// 你的代码
$users = User::all();
$blackfire->endProbe($probe);
安装:
# 安装扩展
pecl install tideways_xhprof
# 配置
echo "extension=tideways_xhprof.so" >> /etc/php.ini
echo "tideways.auto_start=1" >> /etc/php.ini
使用:
<?php
tideways_xhprof_enable(TIDEWAYS_XHPROF_FLAGS_MEMORY | TIDEWAYS_XHPROF_FLAGS_CPU);
// 你的代码
processData();
$data = tideways_xhprof_disable();
// 分析数据
foreach ($data as $func => $metrics) {
echo "{$func}: {$metrics['wt']}μs\n";
}
microtime 计时
<?php
$start = microtime(true);
// 你的代码
sleep(1);
$end = microtime(true);
$time = ($end - $start) * 1000;
echo "执行时间: {$time}ms\n";
memory_get_usage 内存
<?php
$start_memory = memory_get_usage();
// 你的代码
$data = range(1, 100000);
$end_memory = memory_get_usage();
$used = ($end_memory - $start_memory) / 1024;
echo "内存使用: {$used}KB\n";
封装性能监控类:
<?php
class Profiler
{
private static array $timers = [];
private static array $memories = [];
public static function start(string $name): void
{
self::$timers[$name] = microtime(true);
self::$memories[$name] = memory_get_usage();
}
public static function end(string $name): array
{
$time = (microtime(true) - self::$timers[$name]) * 1000;
$memory = (memory_get_usage() - self::$memories[$name]) / 1024;
return [
'time' => round($time, 2) . 'ms',
'memory' => round($memory, 2) . 'KB',
];
}
public static function report(): void
{
foreach (self::$timers as $name => $start) {
$result = self::end($name);
echo "{$name}: {$result['time']}, {$result['memory']}\n";
}
}
}
// 使用
Profiler::start('database');
$users = User::all();
$result = Profiler::end('database');
// database: 125.50ms, 2048.00KB
安装:
composer require barryvdh/laravel-debugbar --dev
配置:
// config/app.php
'providers' => [
Barryvdh\Debugbar\ServiceProvider::class,
],
// .env
DEBUGBAR_ENABLED=true
功能: