本文主要是介绍【腾讯TMQ】压力测试遭遇大量TIME_WAIT之后,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
作者:崔杰
前语:http协议是互联网中最常使用的应用层协议,它的绝大多数实现是基于TCP协议的。
一、问题描述
某天,在对一个提供http接口的后台服务进行压力测试过程中,我们设定了几百qps(每秒请求数)开始测试几分钟后,请求一端(我们后续简称为:客户端)的压力结果统计日志中开始连续出现大量的报错信息:
在压力测试前,根据之前的经验,同类服务的单机性能一般能够达到几千QPS,然而此时测试设定的压力值还不足200qps,这与预期存在1个数量级以上的性能差距,难道是被测服务存在问题么?
二、问题跟踪
为了确认被测服务的状态,我们首先登录了服务所在的机器,检查了服务资源的占用情况,结果是:CPU、内存、硬盘、I/O、网卡、fd、socket等各项资源都不存在较大负载。看来服务本身还远没有达到它的负载瓶颈。
在排除服务端问题后,我们重新分析了统计日志中的错误–“can not assign requested address”,这是一个常见的socket的error,报错信息说明无法为socket创建新的连接,很可能是:tcp层的连接端口已经耗尽,无法为新的http请求分配端口建立连接。通过netstat命令,我们检查客户端,发现确实存在大量请求连接处于TIME_WAIT状态下:
这篇关于【腾讯TMQ】压力测试遭遇大量TIME_WAIT之后的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!