<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[[实践OK]相当有用之频率测试 curl 时间 CURL一行时间参数/curl获取网络时间访问多次测试网页响应时间的shell脚本，需要Curl支持,Curl测试访问时间，DNS解析时间。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Php/Js/Shell/Go]]></category>
<pubDate>Thu, 06 Jun 2013 04:02:23 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	背景：一天突然发现访问网站特别的慢，怎么办？原因是啥，不知道，此时，祭出CURL，加上相关的数据输出，特别是对于DNS慢这种问题最难查，居然被我碰到了，time_namelookup 这个参数很重要，DNS解析时间,从请求开始到DNS解析完毕所用时间(记得关掉 Linux 的 nscd 的服务测试)，当然，查dns更为直观的是用curl的-H参数（http://jackxiang.com/post/4423/），不用dns解析时的一个指标，再就是用dns解析的一个指标，一对比就出来了，该命令在windows下使用也没问题。<br/><textarea name="code" class="php" rows="15" cols="100">
curl -o /dev/null -s -w %&#123;time_namelookup&#125;:%&#123;time_connect&#125;:%&#123;time_starttransfer&#125;:%&#123;time_total&#125;:
%&#123;speed_download&#125; http://XXXX.dujiaox.com/tag/%E9%82%B4%E9%92%9F%E5%85%B4

0.023:0.023:2.575:2.576:2992.000
</textarea><br/><br/><br/>DNS解析时的时间：<br/><textarea name="code" class="php" rows="15" cols="100">
curl -o /dev/null -s -w %&#123;time_namelookup&#125;:%&#123;time_connect&#125;:%&#123;time_starttransfer&#125;:%&#123;time_total&#125;:%&#123;speed_download&#125; &quot;http://jackxiang.com/api.php?client=jackX&amp;method=user.getNickNameAndFace&amp;userid=472730*5&amp;format=json&quot;
</textarea><br/>5.011:5.011:5.020:5.020:<br/>不用DNS相当于写死Host解析时的办法：<br/><textarea name="code" class="php" rows="15" cols="100">
curl -o /dev/null -s -w %&#123;time_namelookup&#125;:%&#123;time_connect&#125;:%&#123;time_starttransfer&#125;:%&#123;time_total&#125;:%&#123;speed_download&#125; -H&quot;Host:jackxiang.com&quot;&quot;http://10.70.*3.X/api.php?client=jackX&amp;method=user.getNickNameAndFace&amp;userid=472730*5&amp;format=json&quot;
</textarea><br/>0.003:0.003:0.026:0.026<br/><br/>time_namelookup时间5.011太长了，说明DNS有问题，一查果然有问题，由于此内网DNS解析了单位办工机器，还解析线上服务器内部域名，压力太大导致，为此，新加了一台dns服务器，减轻压力，解析的速度上去了，也就好了。<br/><br/>相关参数解释：<br/>time_connect&nbsp;&nbsp;建立到服务器的 TCP 连接所用的时间<br/>time_starttransfer&nbsp;&nbsp;在发出请求之后,Web 服务器返回数据的第一个字节所用的时间<br/>time_total&nbsp;&nbsp;完成请求所用的时间<br/>time_namelookup&nbsp;&nbsp;DNS解析时间,从请求开始到DNS解析完毕所用时间(记得关掉 Linux 的 nscd 的服务测试)<br/>speed_download&nbsp;&nbsp;下载速度，单位-字节每秒。（注意它是字节）<br/>[/codes]<br/><br/>来个实例：<br/><textarea name="code" class="php" rows="15" cols="100">
curl -o /dev/null -s -w %&#123;time_namelookup&#125;:%&#123;time_connect&#125;:%&#123;time_starttransfer&#125;:%&#123;time_total&#125;:%&#123;speed_download&#125; &quot;http://jackxiang.com/api.php?client=jackX&amp;method=user.getNickNameAndFace&amp;userid=472730*5&amp;format=json&quot;
</textarea><br/>加上字节：<br/><textarea name="code" class="php" rows="15" cols="100">
curl -o /dev/null -s -w %&#123;time_namelookup&#125;:%&#123;time_connect&#125;:%&#123;time_starttransfer&#125;:%&#123;time_total&#125;:%&#123;speed_download&#125; &quot;http://jackxiang.com/api.php?client=jackX&amp;method=user.getNickNameAndFace&amp;userid=472730*5&amp;format=json&quot;
</textarea><br/><br/><br/>time函数实现时间：<br/><textarea name="code" class="php" rows="15" cols="100">
[root@localhost mysql]# time curl &quot;http://jackxiang.com&quot; &gt; /dev/null 2&gt;&amp;1

real&nbsp;&nbsp;&nbsp;&nbsp;0m0.861s
user&nbsp;&nbsp;&nbsp;&nbsp;0m0.003s
sys&nbsp;&nbsp;&nbsp;&nbsp; 0m0.008s
</textarea><br/><br/><textarea name="code" class="C" rows="15" cols="100">
curl -o /dev/null -s -w &quot;time_connect: %&#123;time_connect&#125;&#92;ntime_starttransfer: %&#123;time_starttransfer&#125;&#92;ntime_total: %&#123;time_total&#125;&#92;n&quot; &quot;http://127.0.0.1:25800/&quot;
</textarea><br/>加上Shell的for循环，一般主要是打印时间：<br/><textarea name="code" class="php" rows="15" cols="100">
screen -S 59.110.133.55
for i in &#123;1..20000&#125;; do curl -o /dev/null -s -w &quot;time_connect: %&#123;time_connect&#125;&#92;ntime_starttransfer: %&#123;time_starttransfer&#125;&#92;ntime_total: %&#123;time_total&#125;&#92;n&quot;&nbsp;&nbsp;-H&quot;Host:bc.qr.cntv.cn&quot; https://59.110.133.55/question_3046.js?c=?&nbsp;&nbsp;2&gt;&amp;1 &gt;&gt; /tmp/59.110.133.55.log;sleep 0.5; done

screen -S 115.182.9.156
for i in &#123;1..20000&#125;; do curl -o /dev/null -s -w &quot;time_connect: %&#123;time_connect&#125;&#92;ntime_starttransfer: %&#123;time_starttransfer&#125;&#92;ntime_total: %&#123;time_total&#125;&#92;n&quot;&nbsp;&nbsp;-H&quot;Host:bc.qr.cntv.cn&quot; https://115.182.9.156/question_3046.js?c=?&nbsp;&nbsp; 2&gt;&amp;1 &gt;&gt; /tmp/115.182.9.156.log;sleep 0.5; done

screen -S&nbsp;&nbsp;220.181.168.24
for i in &#123;1..20000&#125;; do curl -o /dev/null -s -w &quot;time_connect: %&#123;time_connect&#125;&#92;ntime_starttransfer: %&#123;time_starttransfer&#125;&#92;ntime_total: %&#123;time_total&#125;&#92;n&quot;&nbsp;&nbsp;-H&quot;Host:bc.qr.cntv.cn&quot; http://220.181.168.24/question_3046.js?c=?&nbsp;&nbsp; 2&gt;&amp;1 &gt;&gt; /tmp/220.181.168.24.log;sleep 0.5; done
</textarea><br/><br/><br/><br/>粘贴好像会报错，直接给个DownLoad：<br/><a href="attachment.php?fid=352">点击这里下载文件</a><br/>sh curlExecuteTime.sh&nbsp;&nbsp;-n 12 &quot;http://localhost&quot;<br/>**春(**春) 11:11:56<br/>time_connect: 0.001<br/>time_namelookup: 0<br/>time_total: 0.01419<br/>**春(**春) 11:12:18<br/>这个结果按说是没问题的吧 <br/>向东(向东) 11:12:34<br/>没问题，你要想获取接口返回修改下这儿：curl -o /dev/null -s -w &#92;<br/>向东(向东) 11:12:42<br/>它定向到null了。<br/>向东(向东) 11:21:16<br/>c=`curl -o /tmp/$i.txt -s -w &#92;<br/>这样就可以在tmp下生成1.txt 2.txt了，呵呵。<br/>DownLoad:<br/><a href="attachment.php?fid=353">点击这里下载文件</a><br/><br/><br/><br/>零：可以直接用shell实现，用vim列模式/行模式进行批量输入，当然也可以用shell的for循环，如出现301错误需要输出头-i，如下：<br/><textarea name="code" class="php" rows="15" cols="100">curl -o x.log&nbsp;&nbsp;--connect-timeout 5 -m 1 -i &quot;http://jackxiang.com/interact/getMyActs?uid=20099836&amp;page=1&amp;pagesize=4&quot;</textarea><br/><br/>一：PHP下的Curl获取时间 ：<br/><textarea name="code" class="php" rows="15" cols="100">
$ch = curl_init(&#039;http://www.yahoo.com/&#039;);
curl_exec($ch);// 执行
$info = curl_getinfo($ch);
echo &#039;Took &#039; . $info[&#039;total_time&#039;] . &#039; seconds to send a request to &#039; . $info[&#039;url&#039;];
</textarea><br/><br/>二：Shell下的curl原理：<br/>curl -o /dev/null -s -w &#039;连接时间：%&#123;time_connect&#125;,传输时间：%&#123;time_starttransfer&#125;:%&#123;time_total&#125;&#039; &quot;http://jackxiang.com&quot;<br/><textarea name="code" class="JS" rows="15" cols="100">
curl -o /dev/null -s -w &#039;%&#123;time_connect&#125;:%&#123;time_starttransfer&#125;:%&#123;time_total&#125;&#039; &quot;http://jackxiang.com&quot;
</textarea><br/>POST示例（不用-o写入文件，直接看）：<br/><textarea name="code" class="php" rows="15" cols="100">
curl -s -w &#039;timeConnect：%&#123;time_connect&#125;,transferTime：%&#123;time_starttransfer&#125;:%&#123;time_total&#125;&#92;n&#039;&nbsp;&nbsp;-d&quot;key=jackxiang&amp;token=4587adffabsa&amp;ts=787854645646&amp;clientip=127.0.0.1&amp;email=xdy***@126.com&amp;password=123456&amp;sendmail=1&quot;&nbsp;&nbsp;&quot;http://passport.jackxiang.com/api/reg.php&quot;
</textarea><br/>用法及返回结果如下：<br/>lvyaozu@lvyaozu-desktop:~/shell$ ./requesturl.sh -n20 http://www.baidu.com<br/>Request url: http://www.baidu.com<br/>Request number: 20<br/>Request Failed: 0<br/>——Average Value——<br/>time_connect: 0.1614<br/>time_total: 0.1693<br/>time_namelookup: 0.0088<br/>————————-<br/>请求参数：<br/>-n 指定发送多少次请求，默认为10<br/>返回结果为 curl -w 选项返回值，以下摘自curl官方文档：<br/>http://curl.haxx.se/docs/manpage.html<br/>time_connect The time, in seconds, it took from the start until the TCP connect to the remote host (or proxy) was completed.<br/>time_total The total time, in seconds, that the full operation lasted. The time will be displayed with millisecond resolution.<br/>time_namelookup The time, in seconds, it took from the start until the name resolving was completed.<br/>代码如下：<br/><textarea name="code" class="Shell" rows="15" cols="100">
#!/bin/bash
#requesturl.sh
 
usage=&quot;
Usage: $0 [options...] &lt;url&gt;&#92;n
Options:&#92;n
 -h This help text&#92;n
 -n &lt;num&gt; The numbers to request&#92;n
&quot;
if [ $# -lt 1 ]
then
&nbsp;&nbsp;&nbsp;&nbsp;echo -e $usage
&nbsp;&nbsp;&nbsp;&nbsp;exit 1
fi
num=10
while getopts &quot;n:h&quot; arg
do
&nbsp;&nbsp;case $arg in
&nbsp;&nbsp;&nbsp;&nbsp;n)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num=$OPTARG
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if [ $num -lt 1 ]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num=1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;
&nbsp;&nbsp;&nbsp;&nbsp;h)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo -e $usage
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;
&nbsp;&nbsp;&nbsp;&nbsp;?)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;Unknow argument&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;
&nbsp;&nbsp;&nbsp;&nbsp;esac
done
 
url=$(eval echo &quot;&#92;$$#&quot;)
 
if [ &quot;http://&quot; != $&#123;url:0:7&#125; ]
then
&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;The url need to add the http:// prefix&quot;
&nbsp;&nbsp;&nbsp;&nbsp;exit 1
fi
 
echo &quot;Request url: &quot;$url
echo &quot;Request number: &quot;$num
 
i=1
while [ $i -le $num ]
do
&nbsp;&nbsp;&nbsp;&nbsp;c=`curl -o /dev/null -s -w &#92;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;http_code:%&#123;http_code&#125; time_namelookup:%&#123;time_namelookup&#125; &#92;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time_connect:%&#123;time_connect&#125; time_total:%&#123;time_total&#125;&quot; $url`
&nbsp;&nbsp;&nbsp;&nbsp;s=$s$c&quot;&#92;n&quot;
&nbsp;&nbsp;&nbsp;&nbsp;i=$[$i+1]
done
#echo -e $s
echo -e $s &#124; &#92;
awk &#039;&#123;OFS=&quot;&#92;n&quot;&#125;&#123;if($1) for(i=1;i&lt;=NF;i++)print $i&#125;&#039; &#124; &#92;
awk -F: -v num=$num -v failnum=0 &#92;
&nbsp;&nbsp;&nbsp;&nbsp;&#039;&#123;if($1 != &quot;http_code&quot;)result[$1]+=$2;if($1==&quot;http_code&quot; &amp;&amp; $2 != 200)failnum++&#125; &#92;
&nbsp;&nbsp;&nbsp;&nbsp;END&#123;print &quot;Request Failed: &quot; failnum &quot;&#92;n------Average Value------&quot;; &#92;
&nbsp;&nbsp;&nbsp;&nbsp;for(i in result) &#123;print i &quot;: &quot; result[i]/num;&#125; &#92;
&nbsp;&nbsp;&nbsp;&nbsp;print &quot;-------------------------&quot;&#125;&#039;
</textarea><br/><br/>我的实践如下：<br/>sh curlExecuteTime.sh&nbsp;&nbsp;-n 12 &quot;http://jackxiang.com/getAlbumsByUId?appkey=100&amp;userid=21240168&amp;sortby=hot&quot;<br/>Request url: hhttp://jackxiang.com/getAlbumsByUId?appkey=100&amp;userid=21240168&amp;sortby=hot<br/>Request number: 12<br/>Request Failed: 0<br/>------Average Value------<br/>time_connect: 0.001<br/>time_namelookup: 0.001<br/>time_total: 0.0760833<br/>-------------------------<br/><br/>来自：http://renxiangzyq.iteye.com/blog/782773<br/><br/><br/><br/>1、开启gzip请求<br/>curl -I http://www.sina.com.cn/ -H Accept-Encoding:gzip,defalte<br/><br/>2、监控网页的响应时间<br/>curl -o /dev/null -s -w &quot;time_connect: %&#123;time_connect&#125;&#92;ntime_starttransfer: %&#123;time_starttransfer&#125;&#92;ntime_total: %&#123;time_total&#125;&#92;n&quot; &quot;http://www.kklinux.com&quot;<br/><br/>3. 监控站点可用性<br/>curl -o /dev/null -s -w %&#123;http_code&#125; &quot;http://www.kklinux.com&quot;<br/><br/>4、以http1.0协议请求（默认为http1.1）<br/>curl -0 ..............<br/><br/><br/>监控站点首页下载时间：<br/><br/>curl -o /dev/null -s -w ‘%&#123;time_total&#125;’ http://www.miotour.com<br/><br/>curl -o /dev/null -s -w ‘%&#123;http_code&#125;’ http://www.miotour.com<br/><br/>curl -o /dev/null -s -w %&#123;http_code&#125;:%&#123;time_connect&#125;:%&#123;time_starttransfer&#125;:%&#123;time_total&#125; http://www.miotour.com<br/><br/>结果：2.547<br/><br/>-s 静默输出；没有-s的话就是下面的情况，这是在脚本等情况下不需要的信息。<br/><br/>[ec2-user@ip-10-122-250-19 ~]$ curl -o /dev/null&nbsp;&nbsp;-w ‘%&#123;time_total&#125;’ http://www.miotour.com<br/>% Total&nbsp;&nbsp;&nbsp;&nbsp;% Received % Xferd&nbsp;&nbsp;Average Speed&nbsp;&nbsp; Time&nbsp;&nbsp;&nbsp;&nbsp;Time&nbsp;&nbsp;&nbsp;&nbsp; Time&nbsp;&nbsp;Current<br/>Dload&nbsp;&nbsp;Upload&nbsp;&nbsp; Total&nbsp;&nbsp; Spent&nbsp;&nbsp;&nbsp;&nbsp;Left&nbsp;&nbsp;Speed<br/>100 67770&nbsp;&nbsp;&nbsp;&nbsp;0 67770&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;19228&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 –:–:–&nbsp;&nbsp;0:00:03 –:–:– 20705<br/>结果：3.524<br/>监控首页各项时间指标：<br/><br/>curl -o /dev/null -s -w ‘%&#123;time_connect&#125;:%&#123;time_starttransfer&#125;:%&#123;time_total&#125;’ http://www.miotour.com<br/><br/>结果：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.244:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.044:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.672<br/><br/>时间指标解释 ：<br/><br/>time_connect&nbsp;&nbsp;&nbsp;&nbsp;建立到服务器的 TCP 连接所用的时间<br/><br/>time_starttransfer&nbsp;&nbsp;&nbsp;&nbsp;在发出请求之后，Web 服务器返回数据的第一个字节所用的时间<br/><br/>time_total&nbsp;&nbsp; 完成请求所用的时间<br/><br/>在 发出请求之后，Web 服务器处理请求并开始发回数据所用的时间是<br/><br/>（time_starttransfer）1.044 - （time_connect）0.244 = 0.8 秒<br/><br/>客户机从服务器下载数据所用的时间是<br/><br/>（time_total）2.672 - （time_starttransfer）1.044 = 1.682 秒<br/><br/>指定特定主机IP地址访问网站<br/><br/>curl -x 61.135.169.105:80 http://www.baidu.com<br/><br/>curl -x 61.135.169.125:80 http://www.baidu.com<br/><br/><br/>摘录来自：http://blog.163.com/dingding_jacky/blog/static/166912787201242440274/
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践OK]相当有用之频率测试 curl 时间 CURL一行时间参数/curl获取网络时间访问多次测试网页响应时间的shell脚本，需要Curl支持,Curl测试访问时间，DNS解析时间。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>