JMeter-压测问题分析
【报错信息】
Non HTTP response code: org.apache.http.conn.ConnectTimeoutException/Non HTTP response message: Connect to IP:端口 failed: Read timed out
Non HTTP response code: java.net.SocketTimeoutException/Non HTTP response message: Read timed out
Non HTTP response code: java.net.SocketException/Non HTTP response message: Connection reset
Non HTTP response code: org.apache.http.NoHttpResponseException/Non HTTP response message: IP:端口 failed to respond
【分析】
1、在http请求-高级-客户端实现,java会复用tcp链接,而httpclient4是重新请求tcp链接,不会进行复用,这个配置默认是空的,Jmetre5.0以上版本会默认使用httpclient4。
2、windows 环境下的端口循环回收需要消耗2~4分钟。由此猜测可能是由于 windows下压测端口数有限,端口资源被占满,没有及时循环回收,导致报错。
【处理】
【方式一】在http请求-高级-客户端实现,选择java
执行后,接口会报关于Cookie刷新的错,所以不能使用这个方式。(可能是我这里的接口处理逻辑问题)
【方式二】
1、 扩大端口数量
设置 windows下最大端口数 65534,尝试将端口资源数设置为最大,windows最大能支持65534个端口。
(1)使用 win + R 快捷键打开 cmd,输入 regedit 命令打开注册表
(2)设置 MaxUserPort 数量:
● 找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters目录。
● 右击 Parameters,添加一个新的 DWORD,命名为MaxUserPort。
● 然后双击 MaxUserPort,输入 65534,基数选择 十进制(如果是分布式运行的话,控制机器和负载机器都需要这样操作)。
● 修改配置完毕后, 需要重启 windows 才会生效。
2、提高端口使用率
【分析】
windows下的端口 Time_Wait 导致端口无法使用
windows下的端口 CLOSE_WAIT 导致端口无法使用
【处理】
(1)Time_Wait 解决方案
主要思路是通过缩短 TIME_WAIT 的等待时间,提高端口的使用率。
● 使用 win + R 快捷键打开 cmd,输入 regedit 命令打开注册表。
● 找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters目录。
● 右击 parameters,添加一个新的DWORD,命名为 TcpTimedWaitDelay,将值设置为30, 缩短 TIME_WAIT 的等待时间。
● 重启windows,配置项生效。
(2)CLOSE_WAIT 解决方案
【CLOSE_WAIT 引发问题】
Close_Wait 会占用一个连接,网络可用连接小。当数量过多时,可能会引起网络性能下降,并占用系统非换页内存。尤其是在有连接池的情况下(比如 HttpRequest),会耗尽连接池的网络连接数,导致无法建立网络连接。
【CLOSE_WAIT 产生原因】
一般情况下是因为 TCP 连接没有调用关闭方法,需要应用来处理网络链接关闭。
如果是Web请求,经常是因为 Response 的 BodyStream 没有调用 Close。举个例子,Widnows 下使用 HttpWebRequest 一定要保证 GetRequestStream 和 GetResponse 对象关闭,否则容易造成连接处于 CLOSE_WAIT 状态。
TCP的 KeepLive 功能, 操作系统 默认 7200秒 (2小时) 自动清理一次 CLOSE_WAIT 的连接,满足不了高并发下的端口需求数。支持自定义配置。
【CLOSE_WAIT 解决方案】
● 使用 win + R 快捷键打开 cmd,输入 regedit 命令打开注册表。
● 找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters目录。
● 在该目录下添加新的配置项。设置合理的Keepalive参数。
"KeepAliveTime"=dword:006ddd00
"KeepAliveInterval"=dword:000003e8
"MaxDataRetries"="5"
● 重启windows,配置项生效。
我配置后,报错变少了,但并发更大的量,还是会出现报错
参考资料:
https://zhuanlan.zhihu.com/p/105697569
https://blog.csdn.net/fengyuyeguirenenen/article/details/123998742
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· Apache Tomcat RCE漏洞复现(CVE-2025-24813)