获取网站性能指标shell脚本 推荐
2014-04-04 15:37
519 查看
1.web主要性能指标 心理学中第一印象效应非常重要,以后这个印象会产生主导位置影响人们的判断。在浏览器接收到回车到”唰”页面出来这个过程中就那么几秒钟的时间就是客户访问这个网站的第一印象。 根据统计分析,有这么一个现象:如果一个网站的页面加载时间在5秒钟或者更少,用户离开(以关闭页面为准)的比例通常不会超过20%,而超过了五秒钟,用户流失的比例会按照每秒1-2%增加。一般的电脑都能在3-10秒内完成页面的加载。因此,网站的打开速度是直接影响到用户是否愿意接受这个网站的一大要素。通常需要关注的有如下几个性能指标:
命令解释:-o //将curl获取到的页面代码重定向到/dev/null、-s //静默模式,若不加该参数,会有类似于如下的显示:
-w %{option} //指定要获取的指标可获取的指标,如下所示:time_total //完成请求所用的时间time_namelookup //解析完成的时间time_connect //建立到服务器的 TCP 连接所用的时间time_pretransfer //链接建立完成准备响应时间time_redirect //重定向完成时间time_starttransfer //在发出请求之后,Web 服务器返回数据的第一个字节所用的时间http_code //http返回类似404,200,500等size_download //下载网页或文件大小size_upload //上传文件大小size_header //响应头size_request //发送请求参数大小speed_download //传输速度speed_upload //平均上传速度content_type //下载文件类型. (Added in 7.9.5)
执行结果如下:
脚本设计思路(1)通过命令后面带的参数获得统计的次数、统计的URL。(2)通过变量option定义需要获取的性能指标项(3)通过curl命令获取每个性能指标的值,并将其保存在/tmp/data目录下(4)通过awk计算平均值,输出结果
该版本缺点:执行时间较长,由于设计逻辑问题,导致逐个指标取N次,实际执行过程中,若有6个指标,则需要执行60次取值,效率较为低下。于是有了版本二的诞生。
版本二
脚本执行结果:
注:该脚本改进了设计逻辑,在执行curl命令的时候,一次性获取N个指标的值。如此一来,需要10组数据,便只要进行10次取值,提高了执行效率。
版本三 由于网站可能做了keepalive,或者DNS缓存等等,通过curl一次性获取多组数据实际上有可能数据并不那么准确,较好的办法是每间隔一段时间去取一次值,一段时间之后再运行脚本获取平均值。定时获取执行curl命令需要借助crontab的帮助:
计算平均值脚本
2.curl命令介绍
curl支持包括http,https,ftp在内的众多协议,它还支持POST,cookie认证,从指定偏移处下载部分文件,参照页,用户代理字符串,扩展头部,限速,文件大小限制,进度条等特性。下面主要介绍如何通过curl 命令获取到网站的性能指标信息:root@node1:~# curl -o /dev/null -s -w %{time_total}"\n" www.yy.com
命令解释:-o //将curl获取到的页面代码重定向到/dev/null、-s //静默模式,若不加该参数,会有类似于如下的显示:
root@node1:~# curl -o /dev/null -w %{time_namelookup}"\n" www.yy.com % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 148k 0 148k 0 0 503k 0 --:--:-- --:--:-- --:--:-- 536k 0.006 //最后这个值才是我们要的
-w %{option} //指定要获取的指标可获取的指标,如下所示:time_total //完成请求所用的时间time_namelookup //解析完成的时间time_connect //建立到服务器的 TCP 连接所用的时间time_pretransfer //链接建立完成准备响应时间time_redirect //重定向完成时间time_starttransfer //在发出请求之后,Web 服务器返回数据的第一个字节所用的时间http_code //http返回类似404,200,500等size_download //下载网页或文件大小size_upload //上传文件大小size_header //响应头size_request //发送请求参数大小speed_download //传输速度speed_upload //平均上传速度content_type //下载文件类型. (Added in 7.9.5)
3.获取网站性能脚本
版本一#!/bin/bash usage=" Usage: $0 [options...] <url>\n Options:\n -h Show this help message.\n -u <url> The url to request.\n -n <num> The numbers to request\n " if [ $# -lt 4 ];then echo -e $usage exit 1 fi num=10 while getopts "n:h:u" arg do case $arg in n) num=$2 if [ $num -lt 1 ];then num=1 fi ;; h) echo -e $usage exit 1 ;; u) url=$4 ;; *) echo "Unkown argument" exit 1 ;; esac done echo "Request url:" ${url} echo "Request number:" ${num} echo "------Average Value------" [ -d "/tmp/data" ] || mkdir -p /tmp/data options="time_total time_connect time_redirect time_namelookup time_pretransfer time_starttransfer" for option in $options do for ((i=1;i<=${num};i++)) do curl -o /dev/null -s -w %{$option}"\n" $url >> /tmp/data/$option done avg=`awk 'BEGIN{sum=0;NR=0}{sum+=$1}END{print sum/NR}' /tmp/data/$option` echo ${option} " = " ${avg} cat /dev/null > /tmp/data/$option done
执行结果如下:
root@node1:/tmp/shell# ./url.sh -n 5 -u www.yy.com Request url: www.yy.com Request number: 5 ------Average Value------ time_total = 0.541 time_connect = 0.0296 time_redirect = 0 time_namelookup = 0.0054 time_pretransfer = 0.0268 time_starttransfer = 0.0452
脚本设计思路(1)通过命令后面带的参数获得统计的次数、统计的URL。(2)通过变量option定义需要获取的性能指标项(3)通过curl命令获取每个性能指标的值,并将其保存在/tmp/data目录下(4)通过awk计算平均值,输出结果
该版本缺点:执行时间较长,由于设计逻辑问题,导致逐个指标取N次,实际执行过程中,若有6个指标,则需要执行60次取值,效率较为低下。于是有了版本二的诞生。
版本二
#!/bin/bash usage=" Usage: $0 [options...] <url>\n Options:\n -h Show this help message.\n -u <url> The url to request.\n -n <num> The numbers to request\n " echo -e $usage exit 1 fi num=10 while getopts "n:h:u" arg do case $arg in n) num=$2 if [ $num -lt 1 ];then num=1 fi ;; h) echo -e $usage exit 1 ;; u) url=$4 ;; *) echo "Unkown argument" exit 1 ;; esac done echo "Request url:" ${url} echo "Request number:" ${num} echo "------Average Value------" #定义输出文件、需要获取的指标 outputfile="/tmp/data/requestdata.txt" [ -d "/tmp/data" ] || mkdir -p /tmp/data options="%{time_total} %{time_connect} %{time_redirect} %{time_namelookup} %{time_pretransfer} %{time_starttransfer}\n" #执行n次curl,获取n个数据 for ((i=1;i<=${num};i++)) do curl -o /dev/null -s -w "$options" $url >> $outputfile done #计算平均值并输出 awk 'BEGIN{tt=0;tc=0;tr=0;tn=0;tp=0;ts=0}{tt+=$1;tc+=$2;tr+=$3;tn+=$4;tp+=$5;ts+=$6}\ END{print \ " time_total = "tt/NR"\n",\ "time_connect = "tc/NR"\n",\ "time_redirect = "tr/NR"\n",\ "time_namelookup = "tn/NR"\n",\ "time_pretransfer = "tp/NR"\n",\ "time_starttransfer = "ts/NR"\n"}' $outputfile cat /dev/null > $outputfile
脚本执行结果:
root@node1:/tmp/shell# ./url.sh -n 10 -u www.yy.com Request url: www.yy.com Request number: 10 ------Average Value------ time_total = 0.2569 time_connect = 0.0279 time_redirect = 0 time_namelookup = 0.0058 time_pretransfer = 0.0279 time_starttransfer = 0.0569
注:该脚本改进了设计逻辑,在执行curl命令的时候,一次性获取N个指标的值。如此一来,需要10组数据,便只要进行10次取值,提高了执行效率。
版本三 由于网站可能做了keepalive,或者DNS缓存等等,通过curl一次性获取多组数据实际上有可能数据并不那么准确,较好的办法是每间隔一段时间去取一次值,一段时间之后再运行脚本获取平均值。定时获取执行curl命令需要借助crontab的帮助:
#每分钟获取一次数据 root@node1:~# crontab –e * * * * * curl –o /dev/null –s –w %{time_connect} www.yy.com >> /tmp/data/data_collected
计算平均值脚本
#!/bin/bash outputfile="/tmp/data/data_collected" awk 'BEGIN{tt=0;tc=0;tr=0;tn=0;tp=0;ts=0}{tt+=$1;tc+=$2;tr+=$3;tn+=$4;tp+=$5;ts+=$6}\ END{print \ " time_total = "tt/NR"\n",\ "time_connect = "tc/NR"\n",\ "time_redirect = "tr/NR"\n",\ "time_namelookup = "tn/NR"\n",\ "time_pretransfer = "tp/NR"\n",\ "time_starttransfer = "ts/NR"\n"}' $outputfile cat /dev/null > $outputfile
相关文章推荐
- GUI - Web前端开发框架
- Extjs4.0 最新最全视频教程
- 运维入门
- 动态清空 nohup 输出文件
- install scrapy with pip and easy_install
- MyEclipse Web Project转Eclipse Dynamic Web Project
- axis备忘
- Linux Shell常用技巧
- 防止网页脚本病毒执行的方法-from web
- 自学成才的秘密:115个 web Develop 资源
- shell字符串操作详解
- 使用批处理修改web打印设置笔记 适用于IE
- Apache Web让JSP“动”起来
- web下载的ActiveX控件自动更新
- 推荐六款WEB上传组件性能测试与比较第1/10页
- 关于三种主流WEB架构的思考
- Shell编程的一些知识集合
- 用vbs 实现从剪贴板中抓取一个 URL 然后在浏览器中打开该 Web 站点
- web标准知识——从p开始,循序渐进
- web标准知识――用途相似的标签