zoukankan      html  css  js  c++  java
  • 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_MACHINESYSTEMCurrentControlSetServicesTcpipParameters目录。

    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_MACHINESYSTEMCurrentControlSetServicesTcpipParameters目录。

    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_MACHINESYSTEMCurrentControlSetServicesTcpipParameters目录。

    step3: 在该目录下添加新的配置项。设置合理的Keepalive参数。

    "KeepAliveTime"=dword:006ddd00
    
    "KeepAliveInterval"=dword:000003e8
    
    "MaxDataRetries"="5"
    
    • 1
    • 2
    • 3
    • 4
    • 5

    step4: 重启windows,配置项生效。

    8 总结

    解决问题的关键

    敲黑板,划重点

    • 扩大端口数量
    • 提高端口使用率
  • 相关阅读:
    linux软硬链接
    yum配置文件位置
    What is Docker?
    easy_install下载地址及安装
    python setuptools安装
    django--模板
    django基础PROJECT APP View template
    flask+uswgi+nginx+python3.6的venv发布网站ubuntu14.04
    Mixnode 让操作网络资源和数据库一样简单,不一样的爬虫!
    React Native vs. Cordova.
  • 原文地址:https://www.cnblogs.com/xh123456/p/10654404.html
Copyright © 2011-2022 走看看