最终结果展示图:
图解:响应时间在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 "\n".$t["0"]."\t".$t["3"]."\t".$t["6"]."\t".substr(end($t), 1,-1);' -E 'echo "\r\n totaltime:".$totaltime."ms\r\n num:".$num."\r\n avg time:".($totaltime/$num)."ms\r\n" ; ksort($ret); echo "\r\n 饼图数据: \r\n"; foreach($ret as $k => $v) { if($i++ == 9 ) { echo "[\"".($k - $zonesize)."ms以上\",".$v."]"; } else {echo "[\"".($k - $zonesize)."-".$k."ms\",".$v."],";}} echo "\r\n";'
./tongji.sh {nginx日志绝对路径} > {保存结果的文件}
将饼图的数据复制到Highcharts展示页面左边的代码块,点头部的“Run"可在右册生成开头的饼图。
结果解读:
响应时间在160ms以内的请求占总数的75%左右,但所有请求的平均响应时间在210ms(数据部门提供的结果)以上;
结果分析:
系统主要是被10%响应超慢的访问拖累;只要解决这10%响应超慢的访问,系统平均响应时间将大幅减小
2:找出10%响应慢的URL,
代码略去