网络工程师通常更多注物理层/数据链路/IP层的性能和可达性,而开发工程师则更加关注应用层/服务器的性能,在中间的TCP层的性能和问题容易被忽视。最近在做程序性能测试时发现一个POST请求异常的花了100+ms的时间。本文记录了debug过程和一些tcp的相关内容。
为了简化说明这个问题,我们可以将问题抽象如下:
1) 有一个HTTP服务器,提供一个处理POST请求的Handler,这个请求里面,可以简化认为什么都不做,只是读取客户端的Request Body就直接返回了。
2) HTTP客户端发送了一个POST请求, Body大概是500KB左右。
3) 客户端和服务器处在两个数据中心,它们之间的时延大概在20ms左右。

但问题是:明明在Handler里面除了打印一下body什么也没做,为什么Handler却花了100ms左右。
那这100ms究竟花在了哪里呢?Wireshark抓包看一下:

10.0.0.83 是客户端IP,10.0.4.166是服务器端IP。可以发现每隔一段时间(红色部分),发送端会出现一次0.02s左右的时延。一共出现了5次,因此有了100+ms的时延。
下图是TC

在程序性能测试中发现一个POST请求处理耗时100ms,通过Wireshark分析发现是TCP慢启动导致的。文章介绍了TCP慢启动原理,并提出两种解决方案:使用长连接或调整TCP初始窗口大小和缓冲区尺寸。同时提醒注意TCP在高延迟环境下的性能问题。
最低0.47元/天 解锁文章
2836

被折叠的 条评论
为什么被折叠?



