博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP性能调试
阅读量:6093 次
发布时间:2019-06-20

本文共 2903 字,大约阅读时间需要 9 分钟。

hot3.png

非侵入式注入

  • 全局配置
    • 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.gitphpize./configuremakesudo make install

配置

[tideways]extension=tideways.sotideways.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
server {    listen   80;     server_name profile.doumi.com;    # root directive should be global    root   /var/www/xhgui-branch/webroot/;    index  index.php;    location / {         try_files $uri $uri/ /index.php?$args;    }       location ~ \.php$ {        try_files $uri =404;        include /etc/nginx/fastcgi_params;        fastcgi_pass    127.0.0.1:9000;        fastcgi_index   index.php;        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;    }   }
  • 目标站点注入采样库external/header.php;
  • 为了避免php-fpm缓存导致其他未配置站点也被监控数据,在external/header.php文件头部添加 if(empty($_SERVER['PHP_VALUE'])) return;
  • 部分php版本时区处理有缺陷导致500错误,需要在webroot/index.php首行添加date_default_timezone_set('Asia/Shanghai');
  • 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回调函数配置页面聚合方式

转载于:https://my.oschina.net/u/2400083/blog/1606254

你可能感兴趣的文章
MongoDB【最新版V2.6】- 系列 1:Mongdb 启动的基本配置
查看>>
自动化运维工具——ansible
查看>>
LVM
查看>>
mysql数据的binlog处理方法
查看>>
求最大公约数
查看>>
glut输出文字
查看>>
位运算
查看>>
Servlet之ServletContext总结
查看>>
【Python】《Python编程之美 最佳实践指南》读书笔记
查看>>
vim backspace设置选项详解
查看>>
我的友情链接
查看>>
c++中的构造函数和拷贝构造函数
查看>>
了解SYSDATE函数
查看>>
MySQL Query Analyzer查询分析器
查看>>
nagios全攻略(一)---准备阶段
查看>>
Windows 8 - 构建更健康的存储
查看>>
试验一下
查看>>
借助宁盾,搞定滴滴出行双因素认证解决方案
查看>>
Linux常用Debug命令
查看>>
Android4.4的zygote进程
查看>>