1、用Linux下的curl命令测量网络请求(分号是分隔符,可以是其他符号):
curl -o /dev/null -s -w %{time_connect}:%{time_starttransfer}:%{time_total} http://www.baidu.com 0.037:0.209:0.210
-o:表示输出结果到/dev/null,-s表示去除状态信息,-w表示列出后面的参数的结果。
而且python也有一个pycurl模块;
2、curl命令支持的参数,有如下:
- time_connect:建立到服务器的 TCP 连接所用的时间
- time_starttransfer:在发出请求之后,Web 服务器返回数据的第一个字节所用的时间
- time_total:完成请求所用的时间
- time_namelookup:DNS解析时间,从请求开始到DNS解析完毕所用时间(记得关掉 Linux 的 nscd 的服务测试)
- speed_download:下载速度,单位-字节每秒。
通过该命令,可以计算网络请求中DNS解析、连接、传输及总的时间,进行初步的故障排查。
关于nscd的说明:https://www.hi-linux.com/posts/9461.html
3、例子
[root@bcqf ~]# curl -o /dev/null -s -w time_namelookup:" "%{time_namelookup}" "time_connect:" "%{time_connect}" "time_appconnect:" "%{time_appconnect}" "time_pretransfer:" "%{time_pretransfer}" "time_starttransfer:" "%{time_starttransfer}" "time_total:" "%{time_total}" "time_redirect:" "%{time_redirect}" " https://www.baidu.com time_namelookup: 0.004 time_connect: 0.010 time_appconnect: 0.068 time_pretransfer: 0.068 time_starttransfer: 0.075 time_total: 0.075 time_redirect: 0.000
- DNS解析耗时:0.004s
- TCP建立连接的耗时:0.010-0.004=0.06s
- SSL握手完成耗时:0.068-0.010=0.058s,58ms,多了一层SSL还是很耗时的;
- server处理数据的时间:0.068-0.068=0,0ms,说明服务器处理很快,如果server耗时较高,就需要分析他的耗时:防火墙->负载均衡->应用->缓存和DB,需要深入分析时间消耗在哪个环节;
- 总体的耗时:0.075s
- 整个过程没有redirect,所以redirect的耗时为0