PHP性能调试

麦拂沙 · · 111 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

非侵入式注入

  • 全局配置
    • php.ini:auto_prepend_file、auto_append_file
  • 基于站点配置
    • nginx:fastcgi_param PHP_VALUE "auto_prepend_file=your_file_path";
    • apache:php_admin_value auto_prepend_file "your_file_path"

XHProf

XHProf是Facebook开发的轻量级的分层性能测量分析工具,其通过在程序中前后打点记录数据,从而在函数级别比较时间、内存、CPU等指标。

安装

  • 依赖安装
	yum install php-pecl-xhprof
	yum install graphviz #图表绘制插件
  • php.ini中调整储存XHProf运行数据的默认目录xhprof.output_dir="/tmp/xhprof"
  • web服务器启用新主机指向xhprof_html目录,用于图表展现服务
    • 函数报表
    • 函数调用图

使用

xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY); //开始采集数据
// some php logic ...
$xhprofData = xhprof_disable(); //结束采集,返回数组结果


include_once 'xhprof_lib/utils/xhprof_lib.php';
include_once 'xhprof_lib/utils/xhprof_runs.php';
$xhprofRuns = new XHProfRuns_Default();
$source = 'my_source';
$run = $xhprofRuns->save_run($xhprofData, $source);

# 直接访问http://localhost/xhprof_html/index.php 或者如下 单次分析
sprintf('http://localhost/xhprof_html/index.php?run=%s&source=%s', $run, $source);

Tideways

兼容XHProf的分层性能测量分析工具,并仍在持续更新维护中(要求PHP >= 7.0)。

安装

  • 安装基础程序
git clone git@github.com:tideways/php-profiler-extension.git
phpize
./configure
make
sudo make install

配置

[tideways]
extension=tideways.so
tideways.auto_prepend_library=0 #自动注入采样库
tideways.sample_rate=100 #采样频率

使用

tideways_xhprof_enable(TIDEWAYS_XHPROF_FLAGS_MEMORY | TIDEWAYS_XHPROF_FLAGS_CPU);

// some php logic

$data = tideways_xhprof_disable();

XHGui

基于MongoDB的XHProf数据UI接口

特性

  • 支持XHProf、Tideways、Uprofiler
  • 更美观的监控界面
  • 支持数据存储mongo
  • 百分比请求采集
  • 低负载

安装

  • git clone 代码汉化修复版 github.com/laynefyc/xhgui-branch
  • 缓存目录cache权限777
  • composer install --profile --prefer-dist --optimize-autoloader
  • mongo拓展yum install php-mongodb,并config/config.php配置mongo连接
  • web服务器启用新主机指向webroot,并全局注入采样库external/header.php;
  • mongo索引提升性能
	> use xhprof
	> db.results.ensureIndex( { 'meta.SERVER.REQUEST_TIME' : -1 } )
	> db.results.ensureIndex( { 'profile.main().wt' : -1 } )
	> db.results.ensureIndex( { 'profile.main().mu' : -1 } )
	> db.results.ensureIndex( { 'profile.main().cpu' : -1 } )
	> db.results.ensureIndex( { 'meta.url' : 1 } )
	> db.results.ensureIndex( { 'meta.simple_url' : 1 } )
  • mongo自动清理数据每5天
> use xhprof
> db.results.ensureIndex( { "meta.request_ts" : 1 }, { expireAfterSeconds : 432000 } )

配置

  • profiler.enable回调函数配置采样频率
  • profile.simple_url回调函数配置页面聚合方式

本文来自:开源中国博客

感谢作者:麦拂沙

查看原文:PHP性能调试

111 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet