www.beishuo.net 网站打开异常慢的原因

2017-05-04 22:42

现象:客户投诉http://www.beishuo.net/ 网站在移动线路下打不开或者打开异常缓慢(墨绿色是服务器向客户端发送数据的时间,显得非常耗时)
图片
分析:这个CASE比较有意思,我在用科来分析数据包的时候发现服务器的重传率非常高,普遍达到12%以上,如下图,一个450K的内容,花了整整1分3秒种才接收完毕,重传率高达12%,这也上上图墨绿色客户端接收时间超长的原因
图片
由此我判断,要么是服务器自身问题,要么是线路问题导致丢包;那么如何做进一步判断呢?
步骤1:我尝试在电信线路下面尝试打开该网站发现也是异常缓慢!似乎应该理解为和线路无关?
步骤2:使用best trace 追踪该IP:66.116.220.181  www.beishuo.net    
图片
发现服务器地址位于 美国的一家opentransfer的厂家 既然是国外的服务器,那么经验上看应该是线路导致重传的几率更大了。到这里还是无法判断
步骤3:使用代理服务器来排除服务器故障:我使用一个位于日本的代理服务器尝试访问66.116.220.181  www.beishuo.net   
图片 得到HTTPWATCH截图;发现速度非常快,并且没有丢包,那么就排除是服务问题造成的丢包了,从而把网站打开慢的问题归结于线路问题
图片 很多人认为到此事情就结束了,然而该网站打开慢还有第二个原因:如下图,我发现在移动和电信下不用代理打开的时候有一个translate.google.com的翻译JS以及一个google的图片无法加载:
图片
我使用httpwatch初步判断是translate.google.com的一个翻译js无法加载,这里显示加载了96秒还是没有响应
分析:我们通过科来简单看下出现了什么问题:
点开数据包标签 过滤google 发现能够客户能解析到google域名的IP  但是根本无法和谷歌服务器建立连接,每次会话连接都以客户端三次SYN后结束
图片
点开TCP会话;过滤google  我们发现客户端从11:56分开始,总共发起了13次和谷歌的会话,每次都用不同的端口号发起会话3个SYN,一共持续到12:03分结束,然后服务器根本没有响应
图片
我们来看下网页源码:开发人员在网页一开头就调用了一个谷歌翻译的JS文件;并在随后的Body做了一个list元素,调用了google的一个图片元素;然后网页就需要在几分钟以后连接超时后才能完全载入,并且还无法使用google翻译的JS和图片
图片

图片
而如果使用代理服务器那么情况将是:该JS(一共3个元素)最先打开,并且很快载入了,如下图
图片
很多人很疑惑,说 为什么这几个JS不加载整个页面就无法打开呢?
HTTP1.1协议目前最多就同时支持3条TCP下载数据流,如果不释放或者会话超时,剩下的内容是不会并行下载的,这也是该协议的一个缺陷。而代码编写者一开始就引用了3个google元素,无法下载造成会话超时。
至此该问题得到定位:国外出口线路丢包严重再加上谷歌的JS插件(并且位于网页头部共3个元素) 无法加载,超时后,才能加载剩余内容造成的网页打开异常缓慢
解决方法:考虑到这是一个外贸网站,该问题也就在国内出现,开发者或者国内用户我们建议翻墙使用   ,并且建议谷歌翻译JS插件放到网页尾部,以加快页面打开速度