windows下Jmeter压测端口占用问题(亲测有效)
windows下Jmeter压测端口占用问题
1 报错信息描述
压测的初期,在设置了 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压测端口占用问题
https://blog.csdn.net/weixin_43757847/article/details/88188091 1 前情提要人脸识别项目中,云平台新增了人脸识别的校验接口.考虑到存在大量 ...
- windows下使用命令查看端口占用情况
使用下面的命令查看端口占用情况: 比如查看3000端口的占用情况 netstat -ano|findstr 3000 运行后,结果如下: 可以看到进程号为9692的占用了该端口,使用下面的命令查看是哪 ...
- 在windows和linux下如何查看80端口占用情况?是被哪个进程占用?如何终止等
一.在windows下如何查看80端口占用情况?是被哪个进程占用?如何终止等 这里主要是用到windows下的DOS工具,点击"开始"--"运行",输入&quo ...
- Jmeter测试出现端口占用情况
Jmeter测试会出现端口占用情况 这边在这里做个记录,每次都要百度查询,刚好需要整理下,我就也记录一份到这里吧.感谢大佬的文章. 参考文章:windows下Jmeter压测端口占用问题 因Windo ...
- jmeter测试出现端口占用
原文地址:https://www.cnblogs.com/deepSleeping/p/12067654.html Jmeter测试会出现端口占用情况 这边在这里做个记录,每次都要百度查询,刚好需要整 ...
- 停止、启动nginx以及在windows下使用dos命令停止占用的端口
windows下使用dos命令查看占用端口号并停止 windows+R打开命令窗口 查找占用端口对应的PID(进程号) netstat -ano|findstr "port" # ...
- 在windows操作系统中,查询端口占用和清除端口占用的程序
一.在windows操作系统中,查询端口占用和清除端口占用的程序 提升权限后用:netstat -b或用 1.查询端口占用的进程ID 点击"开始"-->"运行&qu ...
- windows下如何查看所有端口及占用
1.在windows下查看所有端口: 先点击电脑左下角的开始,然后选择运行选项,接着我们在弹出的窗口中,输入[cmd]命令,进行命令提示符. 然后我们在窗口中输入[netstat -ano]按下回车, ...
- windows下揪出java程序占用cpu很高的线程 并找到问题代码 死循环线程代码
我的一个java程序偶尔会出现cpu占用很高的情况 一直不知道什么原因 今天终于抽时间解决了 系统是win2003 jvisualvm 和 jconsole貌似都只能看到总共占用的cpu 看不到每个线 ...
随机推荐
- vue 高德地图
index.html <link rel="stylesheet" href="http://cache.amap.com/lbs/static/main1119. ...
- 008-网络抓包工具-wireshark
一.概述 二.安装 三.使用 3.1.基础设置 语言:WireShark→首选项→语言 3.2.使用过程 打开软件,选择对应的网卡, Filter:设置对应的关键词后,点击回车或者右侧箭头 如,协议: ...
- 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_9.RabbitMQ研究-工作模式-发布订阅模式-消费者
消费者需要写两个消费者 定义邮件的类 复制以前的代码到邮件类里面进行修改 最上面 声明队列的名称和交换机的名称 监听修改为email 的队列的名称 手机短信接收端 复制一份email的接收端的代码 改 ...
- C#创建windows服务(二:创建和卸载windows服务)
引用地址: https://docs.microsoft.com/zh-cn/dotnet/framework/windows-services/how-to-create-windows-servi ...
- hadoop 2.8.5安装步骤
1.创建hadoop用户,作为haoop的运行用户 2.配置JAVA_HOME环境变量,修改/etc/profile export JAVA_HOME=/usr/java/jdk1.8.0_51 ex ...
- Unity 的 [HideInInspector]
[HideInInspector] public Transform t; public Transform mm; public Transform nn3; 在变量前面加入,作用:隐藏下一条在In ...
- mysql5.6.36 编译报错make[1]: *** [storage/perfschema/unittest/CMakeFiles/pfs_connect_attr-t.dir/all]..
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysqldb -DMYSQL_UNIX_ADDR=/tmp/m ...
- Burp_Suite_Pro_v1.7.*激活
先下载工具: 链接:https://pan.baidu.com/s/1ZLvg8eqkgWI94FtrhkcTxg 提取码:9z1j 工具运行需要Java环境.解压完后双击keygen 填一下Li ...
- VB6_小林的气象类模块
前言. [如果使用过程有什么问题可以QQ或邮箱联系我. 1919988942 | w2638301509@gmail.com] ___________________________________ ...
- spring boot中Elasticsearch默认版本问题
这是今天遇上的一个问题. 添加的依赖是7.2.0版本的Elasticsearch,但是其中有两项是6.4.3的,导致我从其他地方移植过来的代码报错. 据大神说,这是因为spring boot中默认的E ...