从jmeter3.1升级到5.1.1一年多了。一开始使用的时候就发现使用httpclient4 容易报连接异常,所以一直都是用java实现进行测试。
最近新的测试需求要建立大量连接。测试下来发现java实现底层应该是有复用连接的逻辑。使用15000的线程并发。在服务端的telegraf监控上只能统计到3000~4000的 established的TCP连接。 改源码这种操作还是靠后考虑,于是抓了一通包,百度了一通,试图从配置项里解决httpclient4的问题。
大致过程如下:
1、java实现的keepalive是有效的,单线程发送多次请求时,使用wireshark可以观察到只进行了在开头与结束进行了握手与挥手
2、jmeter5.1.1的httpclient4实现与默认实现下,keepalive是无效的,单线程多次请求时,使用wireshark抓包,每次请求都要进行握手与挥手,这就坑了,难怪连接数蹭蹭的往上走。TIME_WAIT也是一直保持高值。
3、网上搜出来的解决办法没有效果,现在搜索效率真的很低,反反复复搜出来就是同样的几篇文章,主要方法都是修改httpclient4.idletimeout的超时时间。实测根本没有作用,不知道这些文章是无脑转发还是爬虫爬下来的。
其实这个配置项的说明已经很清楚了,我当时看的时候就觉得这项应该没有作用:
# Idle connection timeout (Milliseconds) to apply if the server does not send
# Keep-Alive headers (default 0)