这篇博文分享的是我们针对一个耗时20秒的请求,用Wireshark进行抓包分析的过程。

请求的流程是这样的:客户端浏览器 -> SLB(负载均衡) -> ECS(云服务器) -> SLB -> 客户端浏览器。

下面是分析的过程:

1. 启动Wireshark,针对内网网卡进行抓包。

2. 在IIS日志中找出要分析的请求(借助Log Parser Studio)

通过c-ip(Client IP Address)可以获知SLB的内网IP,在分析Wireshar抓包时需要依据这个IP进行筛选。

通过sc-bytes(Bytes Sent)可以得知请求的响应内容的长度大于1MB,这可能是触发问题的一个条件。

3. 停止Wireshark抓包

4. 在Wireshark的Filter中输入ip.src==10.159.63.237 or ip.dst==10.159.63.237,筛选出针对10.159.63.237这个IP的包。

5. 根据IIS日志中的时间点找出Wireshark中对应的包(最终完成响应内容发送的包):

6. 然后Follow TCP Steam,只列出这个TCP流上的包,这样就可以方便地找出发起请求的包:

看到这个包中的TCP Window size只有29,感觉有些小。我们又专门抓包测试了一下Mac OS X与Windows,Mac OS X的起始TCP Window size是8192,Windows是256。

看了一下之前的SYN/ACK包,才知道了怎么回事?

SLB->ECS,[SYN],TCP Window size:14600
ECS->SLB, [SYN,ACK] TCP Window size:8192
SLB->ECS, [ACK] TCP Window size:29

SLB在SYN时设置的TCP Window size是14600,而ECS中的Windows Server 2012回SYN/ACK时给的TCP Window size是8192,由于SLB的Window size scaling factor是512,于是14600/512就是28了。这地方可以考虑在Windows中将TCP Window size改大一些。

关于TCP Window,推荐阅读园子里Vamei写的博文——协议森林10 魔鬼细节 (TCP滑窗管理)

7. 由于响应内容大于1MB,远远超出了TCP的MSS(Maxitum Segment Size),要进行TCP segment of a reassembled PDU,所以接下来出现了有一堆的TCP segment of a reassembled PDU包。

8. 在发送TCP segment of a reassembled PDU的过程中出现了重复的ACK包

这说明了当时网络环境出了某种问题。

9. 再接下来出现了[TCP Out-Of-Order],服务端收到的TCP包的次序不对,出现的时间点是14:36:26.993176,至此已经耗时84ms。

这里也说明了当时网络环境出了某种问题。

10. 继续发送TCP segment of a reassembled PDU,结果在14:36:27.060223又出现[TCP Dup ACK ]:

11. 接着又出现了[TCP Out-Of-Order]。

12. 接下来SLB给ECS发了一个致命的ACK包,Window Size竟然只有2

这时服务端估计郁闷极了,就如同跟着宝马开车,突然前面的宝马踩了个急刹车。

(注:SLB这么做,也有可能是客户端网络环境的原因)

13. 过了500多ms之后,SLB给ECS发了一个[TCP Window Update]包,将TCP window size改为了36。

14:36:27.779925000    10.159.63.237    10.161.241.208    TCP    66    [TCP Window Update] 14319 > http [ACK] Seq=313 Ack=922921 Win=18432 Len=0 TSval=173285669 TSecr=18155162

14. 交通恢复正常。。。

15. 突然宝马又踩了一次急刹车,TCP window又变成了2:

14:36:27.862061000    10.159.63.237    10.161.241.208    TCP    66    14319 > http [ACK] Seq=313 Ack=957673 Win=1024 Len=0 TSval=173285752 TSecr=18155225

16. 700多ms后的[TCP Window Update]又让交通恢复正常。

17. 就这样反复地踩刹车、加速。。。。

18. 直到了14:36:47,才完成了整个响应内容的发送,而时间已经过去近21秒。

从分析的情况看,SLB与客户端的网络环境都可能引起这个问题。但是从IIS日志来看,有些耗时长的请求竟然达到了140秒,什么样的客户端会傻到一直等2分多钟而不断开TCP连接或重发请求?

云计算之路-阿里云上:Wireshark抓包分析一个耗时20秒的请求的更多相关文章

  1. 云计算之路-阿里云上:从ASP.NET线程角度对“黑色30秒”问题的全新分析

    在这篇博文中,我们抛开对阿里云的怀疑,完全从ASP.NET的角度进行分析,看能不能找到针对问题现象的更合理的解释. “黑色30秒”问题现象的主要特征是:排队的请求(Requests Queued)突增 ...

  2. 云计算之路-阿里云上:Web服务器遭遇奇怪的“黑色30秒”问题

    今天下午访问高峰的时候,主站的Web服务器出现奇怪的问题,开始是2台8核8G的云服务器(ECS),后来又加了1台8核8G的云服务器,问题依旧. 而且3台服务器特地使用了不同的配置:1台是禁用了虚拟内存 ...

  3. 云计算之路-阿里云上-容器难容:容器服务故障以及自建 docker swarm 集群故障

    3月21日,由于使用阿里云服务器自建 docker swarm 集群的不稳定,我们将自建 docker swarm 集群上的所有应用切换阿里云容器服务 swarm 版(非swarm mode). 3月 ...

  4. 云计算之路-阿里云上-新发现:又一种与虚拟内存有关的CPU波动情况

    在云上真是无奇不有,昨天偶然间发现在IIS的应用程序池回收设置中,仅仅设置了一下基于虚拟内存限制的回收,就引发了CPU有规律的波动.在这篇博文中,我们将向大家汇报一下云计算之路上的这个小发现. 在之前 ...

  5. 云计算之路-阿里云上:启用Windows虚拟内存引发的CPU 100%故障

    今天上午11:35~11:40左右,由于负载均衡中的两台云服务器CPU占用突然飚至100%,造成网站5分钟左右不能正常访问,请大家带来了麻烦,请谅解! (上图中红色曲线表示CPU占用) 经过分析,我们 ...

  6. 云计算之路-阿里云上:SLB会话保持的一个坑

    冒着被大家厌烦的风险,今天再发一篇“云计算之路-阿里云上”.这是在前一篇发过之后真实发生的事情,我们觉得定位问题的过程值得分享.而且估计园子里不少朋友被这个问题骚扰过,我们有责任让大家知道问题的真正原 ...

  7. 云计算之路-阿里云上:原来“黑色0.1秒”发生在socket读取数据时

    在昨天的博文(云计算之路-阿里云上:读取缓存时的“黑色0.1秒”)中我们犯了一个很低级的错误——把13ms算成了130ms(感谢陈硕发现这个错误!),从而对问题的原因作出了错误的推断,望大家谅解! 从 ...

  8. 云计算之路-阿里云上:禁用Windows虚拟内存引发的重启

    昨天(2013年8月6日)下午,承载www.cnblogs.com主站的两台云服务器分别自动重启了1次,由于这两台云服务器使用了负载均衡(SLB),重启并未影响网站的正常访问. 与这次重启相关的Win ...

  9. 云计算之路-阿里云上:OCS问题的进展以及11:30-11:50遇到的问题

    (上图是今天出问题期间Web服务器性能监控图,紫色表示的是Request Execution Time) 昨天我们发布了一篇博客分享了我们这两天遇到的OCS(开放缓存服务)问题,详见云计算之路-阿里云 ...

随机推荐

  1. 一个完整的WSDL文档及各标签详解

    <?xml version="1.0" encoding="UTF8" ?> <wsdl:definitions targetNamespac ...

  2. 简单好用的日志管理工具 Logrotate

    前言 日志就像程序的生命记录仪,详细记录下了程序运行的点点滴滴. 慎重的选择记录哪些日志:在茫茫日志海中寻找真正记录问题的日志,你是不想经历的: 精心的定时压缩转移日志:故障发生了,日志却丢了,此时的 ...

  3. 第九章:四大组件之Broadcast Receiver

    第九章:四大组件之Broadcast Receiver   一.广播的功能和特征 广播的生命周期很短,经过调用对象-->实现onReceive-->结束,整个过程就结束了.从实现的复杂度和 ...

  4. [转]Ionic – Mobile UI Framework for PhoneGap/Cordova Developers

    本文转自:http://devgirl.org/2014/01/20/ionic-mobile-ui-framework-for-phonegapcordova-developers/ Ionic i ...

  5. [麦先生]初学Laravel框架与ThinkPHP的不同(1)

    作为一个PHP菜鸟初学Laravel框架 在学习过程中我发现了其与TP框架的不同点,由于时间问题和认识还不够完善我先写出其中几点,有错误的地方希望各位大牛斧正... 1.渲染模版方式的不同:在Lara ...

  6. 边工作边刷题:70天一遍leetcode: day 70

    Design Phone Directory 要点:坑爹的一题,扩展的话类似LRU,但是本题的accept解直接一个set搞定 https://repl.it/Cu0j # Design a Phon ...

  7. codeforces 487C C. Prefix Product Sequence(构造+数论)

    题目链接: C. Prefix Product Sequence time limit per test 1 second memory limit per test 256 megabytes in ...

  8. 2014 Super Training #6 B Launching the Spacecraft --差分约束

    原题:ZOJ 3668 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3668 典型差分约束题. 将sum[0] ~ sum ...

  9. 栈和队列的面试题Java实现【重要】

    栈和队列: 面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min ...

  10. Android安全机制(2) Android Permission权限控制机制

    http://blog.csdn.net/vshuang/article/details/44001661 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 1.概述 Andro ...