记一次通过wireshark和tcpdump排查问题过程

部门主要做数据采集服务,采集过程使用到两级代理,都是自建服务。昨晚在做优化和测试的时候遇到了一个奇怪问题,在本地测试时代理服务很快,但是部署到开发测试机之后会有卡顿,而且是秒级的,本机安装的虚拟机测试也很快。

然后就不停的尝试,但是还是没有效果通过打印日志发现,二级代理很快就返回了,但是一级代理过了一会才收到数据,初步怀疑是不是一级代理没有设置TCP_NODELAY标志,导致虽然应用层打印是返回了,但是网络层会延迟发送。然后就不停的尝试,但是还是没有效果。怀疑跟TCP_NODELAY标志无关,因为TCP_NODELAY只会影响40毫秒左右。

由于对netty和代理服务代码不是很熟悉,对打印log的地方产生了怀疑。之后通过tcpdump将开发测试服务器和本地测试服务器网络包进行了抓取(这里有个小技巧,由于网端口产生的数据包很多,比较难以分析,所以我将测试和代理服务都部署在同一台机器,通过抓取lo端口包进行分析),然后通过wireshark打开抓取的网络包文件。测试及代理服务如下:


测试及代理服务

通过分析开发测试机的抓包,发现关键部分如下:

开发测试机抓包

上图53030对应二级代理的v1端口,6014对应一级代理的s2端口,7978对应测试程序的c端口,63030对应一级代理的s1端口。可以发现二级代理很快就返回了数据(其中蓝条表示一级代理收到数据的响应ACK),但是一级代理过了3秒左右的时间才返回了数据,所以问题出在一级代理上面。进一步排查发现是一级代理上面有一个filter在本地和测试开发机表现不同造成的,问题也很快被解决。

虽然问题很快得到解决,但是问题排查过程中用到的一些方法和思考值得学习和反思,比如抓包测试方案等。最后通过siege连续发送2次请求对两级代理keep-alive长连接进行了验证😀。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,230评论 19 139
  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    保川阅读 11,185评论 1 13
  • 名词延伸 通俗的说,域名就相当于一个家庭的门牌号码,别人通过这个号码可以很容易的找到你。如果把IP地址比作一间房子...
    杨大虾阅读 20,719评论 2 56
  • (最近打算写一个长篇,不喜勿怪) 于是,奥丁便将那巨狼芬里尔留在阿斯嘉德,将那死神海拉封为死亡之 ...
    自知之人阅读 1,481评论 1 3
  • 001 每天吃什么?主食:两碗米饭 一个面包 一个饭团蔬菜:一大碗沙拉 一碗煮蔬菜 一小碗焯蔬菜、一杯蔬菜汁水果:...
    小胖红阅读 2,394评论 2 5

友情链接更多精彩内容