xhprof安装,配置,使用
Posted in php
第一阶段:生成profile文件
安装
- pecl install channel://pecl.php.net/xhprof-0.9.2 (目前是Beta版),
- 如果不能直接install,则可以 pecl download下来后,phpize && ./configure && make && make install
- 编辑php.ini 添加如下
extension=xhprof.so;Path to store xhprof file,;需要定期清理;注意创建路径和权限xhprof.output_dir="/logs/xhprof"
在生产环境中启用
- /home/xLight/php/lib/prepend.php:
<?php//* 启动xhprof,万分之一概率if(mt_rand(1,10000)==1&& function_exists('xhprof_enable') ){xhprof_enable(XHPROF_FLAGS_MEMORY);//XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY ,官方不建议在生产环境开启XHPROF_FLAGS_CPUdefine('XHPROF_ON',true);//标记//定义输出profile文件的规则define('XHPROF_TIMELIMIT',10);//记录执行超过这个时间的。单位:秒define('XHPROF_MEMLIMIT',50);//记录内存使用超过这个量的。单位:M//define('XHPROF_DIR', '/'.date('Ymd_H') ); //开启本行则启用自己的按时间拆分路径逻辑register_shutdown_function('xhprof_save');//die强行终止的程序也会有记录}//*/ - /home/xLight/php/lib/append.php:
function xhprof_save(){//* 结束 xhprof并保存if(!XHPROF_ON)return;// stop profiler$xhprof_data = xhprof_disable();//记录执行时间大于t秒 或内存占用大于m兆if($xhprof_data['main()']['wt'] < XHPROF_TIMELIMIT *1000000&& $xhprof_data['main()']['mu'] < XHPROF_MEMLIMIT *1000000)return;//parameter "source" for UI$source = $_SERVER['HTTP_HOST'].'__';//add host$source .= $_SERVER['REQUEST_URI'] ? $_SERVER['REQUEST_URI'] : $_SERVER['SCRIPT_FILENAME'];//add script$source = str_replace(array('/','.','&','?','='),'_',$source);//parameter "run" for UI$run = str_pad((int)($xhprof_data['main()']['wt']/1000000),4,"0", STR_PAD_LEFT);// 程序执行秒数,扩展成4位,前面补0$run .='_'.str_pad((int)($xhprof_data['main()']['mu']/1000000),4,"0", STR_PAD_LEFT);// 程序占用内存,扩展成4位,前面补0// dir for save file$dir = $XHPROF_DIR ? $XHPROF_DIR :'';$FullDir = ini_get('xhprof.output_dir').'/'.$dir;if($dir && !file_exists($FullDir))@mkdir( $FullDir ,0777,true);$FullPath = $FullDir.'/'.$run.'.'.$source ;file_put_contents($FullPath , serialize($xhprof_data));}//*/ - 编辑php.ini,添加如下内容
auto_prepend_file ="/home/xLight/php/lib/prepend.php"
第二阶段:分析profile文件
配置UI界面
- 只要让通过web访问xhprof-0.9.2/xhprof_html/index.php即可。
- 实际上xhprof产出的就是个php数组,序列化之后保存到磁盘
- xhprof UI就是读取这个序列化后的数组并分析。
使用UI分析profile文件
- 正在coding的列表程序:
- 首先要获得profile对应的source和run两个参数
- source是对应程序调用
- run对应该程序某一次调用,目前该数值为程序执行的秒数与占用内存的结合。比如:”0023_0015″ 代表执行23秒,占用内存15M
0002_0003.test_xlight_me___Goods06_BJBetIndex_php?GoodsType=Score_GoodsNo=090822 |
0002_0003.test_xlight_me___Goods06_BJBetIndex_php?GoodsType=TotalGoals |
0002_0003.test_xlight_me___Goods06_BJBetIndex_php?GoodsType=TotalGoals_GoodsNo=090822 |
0002_0003.test_xlight_me___Goods06_BJBetIndex_php?GoodsType=WDL |
0002_0015.___home_Html_Shell_Buy_AutoDispenseProject_php |
0002_0015.___home_Html_Shell_Buy_DeductProjectMoney_php |
0002_0015.liyq_xlight_me___Goods06_BJBetIndex_php?GoodsType=Score |
0002_0015.liyq_xlight_me___Goods06_BJBetIndex_php?GoodsType=WDL |
0003_0000.test_xlight_me___Remoting_gateway_php |
0003_0015.___home_Html_Shell_Buy_ComputeAssure_php |
0003_0015.liyq_xlight_me___Goods06_BJBetIndex_php?GoodsType=TotalGoals |
0004_0000.test_xlight_me___Remoting_gateway_php |
0004_0009.hejm_xlight_me___User_UserCenter_php |
0004_0015.___home_Html_Shell_Buy_ComputeAssure_php |
0005_0000.test_xlight_me___Remoting_gateway_php |
0005_0003.test_xlight_me___ |
0005_0008.hejm_xlight_me___Goods06_P33D_P3New_php?GoodsType=P3 |
0005_0015.___home_Html_Shell_Buy_ComputeAssure_php |
0005_0015.___home_Html_Shell_Buy_DeductProjectMoney_php |
0006_0000.test_xlight_me___Remoting_gateway_php |
0006_0010.hejm_xlight_me___ |
0006_0015.___home_Html_Shell_Buy_ComputeAssure_php |
0006_0015.___home_Html_Shell_Buy_DeductProjectMoney_php |
0007_0000.test_xlight_me___Remoting_gateway_php |
0007_0010.hejm_xlight_me___ |
0007_0015.___home_Html_Shell_Buy_ComputeAssure_php |
0008_0000.test_xlight_me___Remoting_gateway_php |
0009_0000.test_xlight_me___Remoting_gateway_php |
0009_0008.hejm_xlight_me___Goods06_SSQ7LC_ |
0010_0000.test_xlight_me___Remoting_gateway_php |
0010_0001.test_xlight_me___Remoting_gateway_php |
0011_0000.test_xlight_me___Remoting_gateway_php |
0011_0004.liqh_xlight_me___ |
0011_0015.___home_Html_Shell_Buy_DeductProjectMoney_php |
0013_0001.test_xlight_me___Remoting_gateway_php |
0014_0001.test_xlight_me___Remoting_gateway_php |
0016_0001.test_xlight_me___Remoting_gateway_php |
0016_0018.huxl_xlight_me___ |
0017_0000.test_xlight_me___Remoting_gateway_php |
0019_0000.test_xlight_me___Remoting_gateway_php |
0024_0001.test_xlight_me___Remoting_gateway_php |
0027_0001.test_xlight_me___Remoting_gateway_php |
0029_0001.test_xlight_me___Remoting_gateway_php |