安装php分析工具xhprof

最近牛市来临,我负责的一个直播项目用户量暴涨,服务器负载也逐日升高到7。通过apache日志分析请求响应速度还是很快,apache进程数也保持在正常范围,但是cpu使用率比较高,通过strace命令只能看到加载了一些thinkphp框架的基类和函数库,没有其他异常,再查看io负载比较高,料想可能是1.thinkphp加载的文件比较多,io读取操作频繁。2.设备老化磁盘性能跟不上节奏了,于是安装xhprof分析一下程序代码。

sudo tar -zxvf xhprof-0.9.4.tgz

cd xhprof-0.9.4/extension

sudo /usr/bin/phpize

sudo ./configure --enable-xhprof --with-php-config=/usr/bin/php-config

sudo make

sudo make install

sudo vim /etc/php.d/xhprof.ini 加入extension=xhprof.so

sudo vim /etc/php.ini 加入

[xhprof]
xhprof.output_dir=/tmp/xhprof

重启apache

安装图形工具

sudo yum install -y graphviz


使用方法:

xhprof_enable(XHPROF_FLAGS_CPU+XHPROF_FLAGS_MEMORY);//加上这个参数可以使得xhprof显示cpu和内存相关的数据。

程序代码

$data = xhprof_disable();

//得到统计数据之后,以下的工作就是为页面显示做准备。
$xhprof_root = "/var/www/xhprof";//这里填写的就是你的xhprof的路径

include_once $xhprof_root."/xhprof_lib/utils/xhprof_lib.php";
include_once $xhprof_root."/xhprof_lib/utils/xhprof_runs.php";

$xhprof_runs = new XHprofRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "test");//第二个参数在接下来的地方作为命名空间一样的概念来使用

/**************************
  访问<xhprof-ui-address>/index.php?run=$run_id&source=test就能够看到一个统计列表了。
 
  1. <xhprof-ui-address>其实就是http://localhost/xhprof_html
 
  2. 你会在/tmp里面找到一个类似这样的文件:50f7ed6689205.test.xhprof,第一个部分就是run_id,当然,程序里面的$run_id跟这个是一样的。
     第二个部分的test就是你在save_run里面的第二个参数,第三个部分就是文件后缀不用去管

  3. 例子中,要看到统计列表需要访问的地址就是http://localhost/xhpro_html/index.php?run=50f7ed6689205&source=test
**************************/



访问<xhprof-ui-address>/index.php?run=$run_id&source=test

可以看到框架加载的文件和调用的方法,图表会显示程序最耗时的调用路径。经过分析,框架大部分的时间都耗费在加载文件上面了,根据同事之前压测过thinkphp框架的经验,也发现在压力较大时cpu和io负载非常高,其他指标正常。于是申请横向扩容,新服务器上线后对比旧服务器发现同样的权重下,旧服务器负载任然高达2.5左右,而新服务器负载在不到0.1。于是分析对比一下新旧服务器磁盘性能。

用vmstat 0 100查看下系统负载,都未发现异常,于是压测下磁盘。

旧机器:

 sudo dd if=/dev/cciss/c0d0p3 bs=1024 count=1000000 of=/home/qiang.deng/1Gb.file


1000000+0 records in
1000000+0 records out
1024000000 bytes (1.0 GB) copied, 29.9413 seconds, 34.2 MB/s


dd if=/home/qiang.deng/1Gb.file bs=64k | dd of=/dev/null


15625+0 records in
15625+0 records out
1024000000 bytes (1.0 GB) copied, 3.59115 seconds, 285 MB/s
2000000+0 records in
2000000+0 records out
1024000000 bytes (1.0 GB) copied, 3.59146 seconds, 285 MB/s

新机器:

 sudo dd if=/dev/sdb bs=1024 count=1000000 of=/usr/home/qiang.deng/1Gb.file


1000000+0 records in
1000000+0 records out
1024000000 bytes (1.0 GB) copied, 5.26781 s, 194 MB/s


sudo dd if=/usr/home/qiang.deng/1Gb.file bs=64k | dd of=/dev/null


15625+0 records in
15625+0 records out
1024000000 bytes (1.0 GB) copied, 2.75348 s, 372 MB/s
2000000+0 records in
2000000+0 records out
1024000000 bytes (1.0 GB) copied, 2.75382 s, 372 MB/s

果然旧机器的磁盘性能较差,尤其是写入操作,可见在加载文件和生成各类日志的时候消耗了不少cpu性能。

你可能感兴趣的:(PHP,thinkphp)