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请求,经常是因为 ResponseBodyStream 没有调用 Close。举个例子,Widnows 下使用 HttpWebRequest 一定要保证 GetRequestStreamGetResponse 对象关闭,否则容易造成连接处于 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压测端口占用问题(亲测有效)的更多相关文章

  1. windows下Jmeter压测端口占用问题

    https://blog.csdn.net/weixin_43757847/article/details/88188091 1 前情提要人脸识别项目中,云平台新增了人脸识别的校验接口.考虑到存在大量 ...

  2. windows下使用命令查看端口占用情况

    使用下面的命令查看端口占用情况: 比如查看3000端口的占用情况 netstat -ano|findstr 3000 运行后,结果如下: 可以看到进程号为9692的占用了该端口,使用下面的命令查看是哪 ...

  3. 在windows和linux下如何查看80端口占用情况?是被哪个进程占用?如何终止等

    一.在windows下如何查看80端口占用情况?是被哪个进程占用?如何终止等 这里主要是用到windows下的DOS工具,点击"开始"--"运行",输入&quo ...

  4. Jmeter测试出现端口占用情况

    Jmeter测试会出现端口占用情况 这边在这里做个记录,每次都要百度查询,刚好需要整理下,我就也记录一份到这里吧.感谢大佬的文章. 参考文章:windows下Jmeter压测端口占用问题 因Windo ...

  5. jmeter测试出现端口占用

    原文地址:https://www.cnblogs.com/deepSleeping/p/12067654.html Jmeter测试会出现端口占用情况 这边在这里做个记录,每次都要百度查询,刚好需要整 ...

  6. 停止、启动nginx以及在windows下使用dos命令停止占用的端口

    windows下使用dos命令查看占用端口号并停止 windows+R打开命令窗口 查找占用端口对应的PID(进程号) netstat -ano|findstr "port" # ...

  7. 在windows操作系统中,查询端口占用和清除端口占用的程序

    一.在windows操作系统中,查询端口占用和清除端口占用的程序 提升权限后用:netstat -b或用 1.查询端口占用的进程ID 点击"开始"-->"运行&qu ...

  8. windows下如何查看所有端口及占用

    1.在windows下查看所有端口: 先点击电脑左下角的开始,然后选择运行选项,接着我们在弹出的窗口中,输入[cmd]命令,进行命令提示符. 然后我们在窗口中输入[netstat -ano]按下回车, ...

  9. windows下揪出java程序占用cpu很高的线程 并找到问题代码 死循环线程代码

    我的一个java程序偶尔会出现cpu占用很高的情况 一直不知道什么原因 今天终于抽时间解决了 系统是win2003 jvisualvm 和 jconsole貌似都只能看到总共占用的cpu 看不到每个线 ...

随机推荐

  1. SourceTree软件

      A free Git client for Windows and Mac SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端管理工具,同时也是Mer ...

  2. otter安装、使用

    一.otter简介 otter是阿里开源的一个分布式数据库同步系统,尤其是在跨机房数据库同步方面,有很强大的功能.它是基于数据库增量日志解析,实时将数据同步到本机房或跨机房的mysql/oracle数 ...

  3. 如何使用git cherry-pick将同一个仓库的某个分支的某些commit合并到当前分支?

    答: git cherry-pick <another-branch's commit-id>

  4. mac下的夜神模拟器链接vscode

    1.找到夜神模拟器,点击右键,查看包内容,找到文件夹下面的macos在点击右键打开终端.输入: adb connect 127.0.0.1:62001 dart和flutter交流群:45289287 ...

  5. Build Telemetry for Distributed Services之Jaeger

    github链接:https://github.com/jaegertracing/jaeger 官网:https://www.jaegertracing.io/ Jaeger: open sourc ...

  6. Qt编写安防视频监控系统12-异形布局

    一.前言 视频监控系统中,除了常规的1画面.4画面.9画面.16画面以外,还有几个布局比较另类,比如6画面.8画面.13画面,有些通道需要占据不同的行列,4画面.9画面.16画面都是非常对称的布局,行 ...

  7. 【401】Python 求合数的所有质数因子

    对于这样的一个题目来说,出看来,可能会想到判断是否为质数,但其实并不需要. 只要按照从2开始遍历,只要遇到可以整除的就是想要的质数,理由是,如果遇到合数的话,那么在此之前一定会遇到这个合数的质因子,因 ...

  8. PAT 甲级 1012 The Best Rank (25 分)(结构体排序)

    题意: 为了评估我们第一年的CS专业学生的表现,我们只考虑他们的三个课程的成绩:C - C编程语言,M - 数学(微积分或线性代数)和E - 英语.同时,我们鼓励学生强调自己的最优秀队伍 - 也就是说 ...

  9. Spring Security(1):认证和授权的核心组件介绍及源码分析

    Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方式的安全框架.它包括认证(Authentication)和授权(Authorization)两个部 ...

  10. ubuntu kylin 18.04安装docker笔记

    删除原有的docker应用(如果有的话): sudo apt-get remove docker docker-engine docker.io 更新一下: sudo apt-get update 下 ...