windows下Jmeter压测端口占用问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了windows下Jmeter压测端口占用问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3002字,纯文字阅读大概需要5分钟。
内容图文
windows下Jmeter压测端口占用问题
3 报错信息描述
压测的初期,在设置了 150qps/s 的并发数下压测几分钟后 Jmeter
就出现了如下报错。
JAVA.NET.BINDEXCEPTION: ADDRESS ALREADY IN USE: CONNECT
- 1
- 2
4 问题排查
开始考虑的方向是Nginx、PHP、MySQL做了相关限制导致线程被占用, 但是修改对应的配置后发现没有任何效果,该报错的还是报错。 查了一波资料,发现 windows 环境下的端口循环回收需要消耗2~4分钟。由此猜测可能是由于 windows下压测端口数有限,端口资源被占满,没有及时循环回收,导致报错。
5 初步解决之扩大端口数量
设置 windows下最大端口数 65534,尝试将端口资源数设置为最大,windows最大能支持65534个端口。
步骤1
使用 win + R 快捷键打开 cmd
,输入 regedit
命令打开注册表
步骤2 设置 MaxUserPort 数量
2.1 找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
目录。
2.2 右击 Parameters
,添加一个新的 DWORD
,命名为MaxUserPort
。
2.3 然后双击 MaxUserPort
,输入 65534,基数选择 十进制(如果是分布式运行的话,控制机器和负载机器都需要这样操作)。
2.4 修改配置完毕后, 需要重启 windows 才会生效。
6 初步实践
采用上述的解决方案之后,windows 下设置 150qps/s 并发数进行压测,暂时解决了端口占用的问题。在此基础上,将压测的并发数提高至 700qps/s,两分钟内达到 66000+
个请求,数量超过了 65534
端口数,再次出现了同一报错。
扩大 windows 端口资源数量, 能够支持 150qps/s 并发数的压测。 但是在高并发数(700qps/s)的压测下,即使 windows 端口资源数量设置为最大,也会出现端口占用的问题。
7 深入研究之提高端口使用率
又是一波海量搜索,定位到了两个影响端口使用率的主要因素,具体如下。
-
windows下的端口
Time_Wait
导致端口无法使用 -
windows下的端口
CLOSE_WAIT
导致端口无法使用
7.1 Time_Wait 解决方案
主要思路是通过缩短
TIME_WAIT
的等待时间,提高端口的使用率。
step1: 使用 win + R 快捷键打开 cmd
,输入 regedit
命令打开注册表。
step2: 找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
目录。
step3: 右击 parameters
,添加一个新的DWORD,命名为 TcpTimedWaitDelay
,将值设置为30
, 缩短 TIME_WAIT
的等待时间。
step4: 重启windows,配置项生效。
7.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 解决方案
step1: 使用 win + R 快捷键打开 cmd
,输入 regedit
命令打开注册表。
step2: 找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
目录。
step3: 在该目录下添加新的配置项。设置合理的Keepalive
参数。
"KeepAliveTime"=dword:006ddd00
"KeepAliveInterval"=dword:000003e8
"MaxDataRetries"="5"
- 1
- 2
- 3
- 4
- 5
step4: 重启windows,配置项生效。
8 总结
解决问题的关键
敲黑板,划重点
- 扩大端口数量
- 提高端口使用率
内容总结
以上是互联网集市为您收集整理的windows下Jmeter压测端口占用问题全部内容,希望文章能够帮你解决windows下Jmeter压测端口占用问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。