jmeter keep-alive 浅解
首先我们要对keepalive有个简易的理解,tcp 的keepalive是侧重客户端和服务端的连接,即只有同样的客户端才能反复使用这个连接。但是http的不一样,http请求,客户端带上了keep-alive之后,这个连接可以复用,即一个http请求处理完之后,另外一个http请求会从这个连接走。
看到这里,我们很容易会以为并发测试的时候,如果勾选了heep-alive,是不是走的都是重复的连接,即并发数和客户端的端口数应该是一样的。但并不是这个样子。
jmeter http请求默认是开启了 keep-alived的,但是在jmeter 配置文件 jmeter.properties中连接时间确实注销的,即,jmeter不会等待,一旦连接空闲 或者可以理解为接受完服务器的数据后,就立马断开连接。
所以不修改jmeter配置文件,并发时不管是否勾选keepalive,每个线程都是一个全新的(可以并发时查看客户端端口数验证,会发现不管是否带keepalive,端口数一定>=并发数,对于响应较慢的接口,端口数可能更多,更严谨的可以抓包看每个链接的客户端的端口和服务器的端口是否都是固定的)。
但是不勾选keep-alive的时候,当建立连接,数据传输完毕之后,服务器就会率先发起断开连接的操作,这个时候连接的状态为TIME_WAIT,并会保持2MSL(即两倍的分段最大生存期)。处于TIME_WAIT状态的连接占用的资源不会被内核释放,所以会严重影响服务器的处理能力,甚至耗尽socket,导致其他的请求不能处理。
那如果并发时因为TPS太高,导致可能出现端口不够用的情况,以下解决方法还未验证,仅供参考。
1.添加线程组之后,再添加循环控制器,再把http请求挂到这个循环控制器上面,可以减少端口的使用,但具体的还需要实践证明
2.保持keepalive,并且配置jmeter.properties里面的httpclient4.idletimeout的时间,单位是ms,然后在http请求-高级里面,implementation选择httpclient4,timeout的时间再配置以下,最好和配置文件里面的超时时间一致。
来源:CSDN
作者:weixin_40295609
链接:https://blog.csdn.net/weixin_40295609/article/details/103902760