很多租用新服务器的站长关心的一个问题是,用户连接网站的速度怎样。这里的“速度”主要指两个方面,一个是服务器的响应时间或者叫网络延迟(response time or network latency),另一个是服务器和用户之间的带宽(throughput)。响应时间指的是用户(或者服务器)向服务器(或用户)发送一段建立连接请求到最终接收到对方回馈之间的延迟时间;而连接带宽指的是当连接建立之后单位时间能传递的数据量。响应时间和带宽这两个量共同影响用户体验到的“网站连接速度”:如果用户点击网站链接后过较长时间才有响应,但一旦有响应后网站瞬时打开,这说明服务器响应时间较长但连接带宽较高;如果点击链接后很快响应但很久才完全载入页面,说明响应时间较小但带宽也较小。
测量响应时间通常使用ping或者 traceroute工具,比如下面这个ping的例子:
$ ping baidu.com PING baidu.com (220.181.6.81) 56(84) bytes of data. 64 bytes from 220.181.6.81: icmp_seq=1 ttl=51 time=284 ms 64 bytes from 220.181.6.81: icmp_seq=2 ttl=51 time=284 ms 64 bytes from 220.181.6.81: icmp_seq=3 ttl=51 time=283 ms
最后的283ms指的是从客户端发送64个字节到baidu然后再返回接收到的往返时间(round-trip time)是283毫秒。
测量连接带宽通常需要直接下载某个较大(比如几十兆)的探针文件,然后测量平均下载的KB/s。但这种方法并不准确,因为单个网页的字节数往往较小(几十到上百K字节),有效传输速度(effective transfer speed,实际的传输字节数除以传输时间)往往大于大文件的平均传输速度,而顺时的爆发传输速度(burst speed)更有可能是平均速度的数倍。而且服务器和用户(特别是用户)的网络总带宽会影响到连接带宽。
通常,站长请求用户测试网站速度会包括两个步骤,一是请用户ping服务器,另一个就是请用户下载某个探针文件。在无法使用ping 的情况,或者当延迟较高需要查找问题的时候,站长也会要求用户补充traceroute数据,以便根据连接经由路径的情况来分析高延迟产生的原因。
连接带宽往往是不对称的(上传和下载速度不同),但网络延迟时间基本是对称的,也就是说用户ping服务器的时间应该和服务器 ping用户的时间大致相等。利用这个对称性,我写了trAlyzr,一个用来自动统计网站和用户之间网络延迟时间的工具包。考虑到用户可能在某种防火墙之内不是总能ping 的通,trAlyzr利用从服务器traceroute访客IP来测量网络延迟,当用户在防火墙或者关机的时候,测量到的实际上是服务器和最终的那个防火墙或者网关的延迟,但因为防火墙和网关和局域网内的用户机器延迟通常很小(几个ms或更小),这种方法测量到的几乎就是服务器和终端用户的连接延迟。
我编写这个工具的目的主要是为了分析服务器在美国(或者其他国外地区)的VPS对中国IP的网络延迟,如果你需要测量国内或者美国的服务器对全球各地IP的网络延迟,你要对工具中的脚本做修改。
这个工具利用QQ的纯真IP数据库来分析用户IP的地理位置。 下载
你可以在svn 中下载这个软件:
svn checkout http://tralyzr.googlecode.com/svn/trunk/ tralyzr
使用
这是个Linux下的工具。因为需要traceroute,你通常需要 root权限才能运行这个软件。脚本是python写的,所以你也需要 python。
解压后将 getips.py中的
f=open(“%s/sample_ips.log”%curdir)
一行修改为你的网站服务器的log位置。对log的格式没有特别要求,只要访问者的IP是在每行的最前面即可。
如果你不修改getips.py文件,那么默认使用sample_ips.log
然后
./getips.py
可从log文件中将所有中国的非搜索引擎的IP提出存放在ips.txt中。然后traceroute这些IP:
./traceip.py
运行时间取决于ips.txt中的IP数目和你的网络情况,traceroute 1000个IP可能需要40分钟左右。traceroute的结果会放在data/目录下等待分析。
然后用parseip.py脚本分析存放在data/下的结果(注意分析这些数据不需要root权限):
./parseip.py
分析的数据会保存在下面三个文本格式的文件中:
1. delays.dat : 存放了用户的网络延迟时间分布,从100ms开始到600ms 2. prov_delay.dat : 存放了各个省的用户连接服务器的平均延迟 3. prov_num.dat : 存放了各个省的用户(IP)占总IP的百分比
为了形象地展示这些数据,我写了三个 gnuplot脚本绘制数据图。你可以通过
gnuplot *.g
来生产图表。