当前位置: 首页 > news >正文

谷粒商城实战笔记-143-性能压测-压力测试-JMeter在windows下地址占用bug解决

文章目录

    • 问题背景
    • 解决步骤
      • 1. 修改端口范围
      • 2. 调整端口回收时间
      • 3. 重启机器
    • 补充说明
      • 为什么端口会被用完?
      • 为什么Windows要设置这样的限制?
    • 注意事项
    • 参考链接

在进行性能压测或压力测试时,使用JMeter这样的工具来模拟大量用户请求,以测试应用程序的承载能力。

然而,在Windows操作系统下,我们可能会遇到一个棘手的问题:端口占用。

JMeter Address Already in use

本文讲解如何通过修改Windows系统设置来解决这个问题。

问题背景

Windows操作系统默认为TCP/IP连接分配的端口范围是1024到5000。当大量并发请求在短时间内发起时,这些端口很快就会被占满,导致新的连接无法建立。此外,Windows还有一个端口回收机制,它会在端口关闭后等待四分钟才重新使用该端口,这进一步加剧了端口不足的问题。

解决步骤

要解决这个问题,需要调整Windows的端口设置,扩大端口范围,并减少端口回收的等待时间。以下是详细的解决步骤:

1. 修改端口范围

首先,我们需要修改Windows的注册表来扩大端口范围。

  • 打开命令提示符(cmd)。
  • 输入regedit命令打开注册表编辑器。
  • 导航到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters路径。
  • 右击Parameters,选择“新建” -> “DWORD (32位)值”,命名为MaxUserPort
  • 双击MaxUserPort,输入数值数据为65534(这是Windows允许的最大端口号),基数选择“十进制”。

2. 调整端口回收时间

接下来,需要减少端口回收的等待时间。

  • 在同一注册表路径下,找到或新建一个DWORD值,命名为TCPTimedWaitDelay
  • 双击TCPTimedWaitDelay,将数值数据设置为30(单位为秒,表示端口在关闭后30秒后可被回收)。

3. 重启机器

修改注册表后,需要重启计算机以使设置生效。

补充说明

在TCP/IP协议中,每个连接都需要一个四元组来唯一标识,即源IP地址、源端口号、目标IP地址和目标端口号。

使用Jemter发起一个请求时,windows端也会使用一个临时端口与服务器建立连接。

为什么端口会被用完?

  1. 端口范围限制:Windows系统默认为动态或临时端口分配的范围是1024到5000。这意味着当应用程序需要监听或建立新的TCP/IP连接时,它必须使用这个范围内的端口。

  2. 大量并发连接:在进行性能测试或高流量的网络服务时,可能会在短时间内产生大量并发连接请求。如果这些请求的数量超过了默认端口范围所能提供的端口数量,就会出现端口耗尽的情况。

  3. 端口回收机制:当TCP连接关闭后,端口并不会立即被释放供其他连接使用。Windows有一个端口回收机制,它会在端口关闭后等待一段时间(默认是4分钟)才将端口标记为可用。这可能会导致端口在短时间内无法被重新使用。

为什么Windows要设置这样的限制?

  1. 安全考虑:较低的端口号(1-1023)通常被分配给众所周知的服务和应用程序,如HTTP(80端口)、HTTPS(443端口)等。这些端口被称为“知名端口”或“系统端口”,通常由系统或管理员管理。限制端口范围可以减少恶意软件或未授权应用程序使用这些端口的风险。

  2. 管理简便性:通过限制端口的使用范围,系统管理员可以更容易地管理和监控网络服务和应用程序的端口使用情况。

  3. 避免资源耗尽:如果没有任何限制,理论上可以有无限多的端口被使用,这可能会导致系统资源耗尽,影响系统稳定性。

  4. 兼容性:许多网络应用程序和服务依赖于特定的端口号,这些端口号在RFC(请求评论稿)中被定义。Windows需要保持与这些标准兼容。

  5. 端口回收策略:端口回收机制是为了防止所谓的“端口耗尽”攻击,这是一种拒绝服务攻击(DoS),攻击者通过快速打开和关闭连接来耗尽可用端口,导致合法用户无法建立连接。

通过理解这些原因,我们可以更好地评估和调整Windows的网络设置,以适应不同的网络环境和应用需求。在某些情况下,如大规模的负载测试或高并发的网络服务,可能需要调整端口范围和回收策略以避免端口耗尽的问题。

注意事项

  • 这些更改可能会影响到系统的安全性和稳定性,建议在测试环境中进行。
  • 如果是分布式运行环境,控制机器和负载机器都需要进行相应的设置。

通过上述步骤,我们可以有效地解决JMeter在Windows下因端口不足而导致的连接问题。

参考链接

参考链接https://support.microsoft.com/zh-cn/help/196271/when-you-try-to-connect-from-tcp-ports-greater-than-5000-you-receive-t

http://www.lryc.cn/news/419428.html

相关文章:

  • Pod的调度机制
  • JIT(即时编译)编译器
  • 循环执行时数据的同步方式
  • Jvm G1与ZGC启动参数
  • zdpgo_gin_zap 整合zdpgo_gin框架和zdpgo_zap框架的日志中间件,用于实现路由日志记录
  • FOC电流环
  • 工业设备数据采集方案的设计实施与应用-天拓四方
  • 【MySQL】索引——索引的实现、B+ vs B、聚簇索引 VS 非聚簇索引、索引操作、创建索引、查询索引、删除索引
  • 剖析HTML 元素——WEB开发系列02
  • 影响3D打印零件品质的关键因素探析
  • Oracle事务是怎么练成的
  • 线程与多线程(一)
  • 连接其他主机上的redis连接不上`telnet: Unable to connect to remote host: Connection refused`
  • dijkstral算法详解
  • 创意指南丨AR数学沉浸式空间体验
  • linux文件——深度学习文件fd、文件系统调用
  • 003集——C#数据类型 及大小端序转换——C#学习笔记
  • 结构化输出及其使用方法
  • yolov8人脸识别案例
  • 成员变量在Java中的定义与使用
  • Python开发工具PyCharm入门指南 - 用户界面主题更改
  • TCP网络套接字
  • Element学习(axios异步加载数据、案例操作)(5)
  • 大数据-65 Kafka 高级特性 分区 Broker自动再平衡 ISR 副本 宕机恢复再重平衡 实测
  • html+css+js网页设计 软通动力网站2个页面(带js)首页轮播图+置顶导航
  • 【经验分享】ShardingSphere+Springboot-04:自定义分片算法(COMPLEX/STANDARD)
  • 如何设置RabbitMQ和Redis消息队列系统
  • 白骑士的Matlab教学高级篇 3.3 工具箱与扩展
  • bug: 配置flyway.locations多个脚本位置不生效
  • 8月5日SpringBoot学习笔记