最终结果展示图:
图解:响应时间在40ms以内的请求数占请求总量的7%,40到80ms的的请求数占32.9%,依次类推。。。
性能问题有很多种可能,普通的情况通过xhprof可查得主要的性能损耗。但有些情况却是通过xhprof不能分析出结果。如一个应用有N个URL,其中有一部分处于响应慢,一部分响应快,此时为了找出响应慢的URL就需要对nginx进行分析。
1:分析nginx日志确定是否存在此类问题。(获取PHP运行时间分布图,使用了shell、php)
LOGFILE=$1 if [ $# ne 2 ];then ZONESIZE=$2 else ZONESIZE=40 fi cat $LOGFILE | /usr/local/php/bin/php -B "$totaltime = 0; $num = 0; $i = 0; $zonesize = $ZONESIZE;" -R '$t = explode(" ", $argn); if($t["8"] != 200) return ''; $url = $t["6"]; $time = substr(end($t), 1,-1) * 1000; $totaltime += $time; $num++; $timelevel = ceil($time/$zonesize); if($timelevel == 0) return ''; if($timelevel > 10) $timelevel = 10; $ret[$timelevel*$zonesize]++; echo " ".$t["0"]." ".$t["3"]." ".$t["6"]." ".substr(end($t), 1,-1);' -E 'echo " totaltime:".$totaltime."ms num:".$num." avg time:".($totaltime/$num)."ms " ; ksort($ret); echo " 饼图数据: "; foreach($ret as $k => $v) { if($i++ == 9 ) { echo "["".($k - $zonesize)."ms以上",".$v."]"; } else {echo "["".($k - $zonesize)."-".$k."ms",".$v."],";}} echo " ";'
./tongji.sh {nginx日志绝对路径} > {保存结果的文件}
将饼图的数据复制到Highcharts展示页面左边的代码块,点头部的“Run"可在右册生成开头的饼图。
结果解读:
响应时间在160ms以内的请求占总数的75%左右,但所有请求的平均响应时间在210ms(数据部门提供的结果)以上;
结果分析:
系统主要是被10%响应超慢的访问拖累;只要解决这10%响应超慢的访问,系统平均响应时间将大幅减小
2:找出10%响应慢的URL,
代码略去