
目录websocket连接失败提示 Response message: WebSocket I/O error: Address already in use: connect测试项优化策略websocket连接失败提示 Response message: WebSocket I/O error: Address already in use: connect问题jemeter使用websocket测试服务程序性能请求后失败结果显示 Response message:WebSocket I/O error:Address already in use:connect这个报错 Address already in use:connect 意味着 JMeter 所在的压测机客户端本地临时端口被耗尽而不是被测的 WebSocket 服务端出了问题。 在 Windows 环境下默认提供给客户端临时连接的端口只有约4000个1024-5000且关闭后的端口会进入 TIME_WAIT 状态并被保留4分钟240秒才能回收。做 WebSocket 压测时短时间高并发会迅速占满这些端口导致新连接无法建立。 解决方案 方案一调整 Windows 注册表最根本的解决办法 这是解决该问题的标准操作通过扩大端口范围并缩短回收等待时间让系统能更快地腾出端口给新连接使用。1.打开注册表编辑器按 WinR输入 regedit 回车。2.定位路径 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters3.新建/修改以下 DWORD32位值基数选“十进制” MaxUserPort设置为65534。作用是将动态端口的上限从默认的5000扩大到65534大幅增加可用端口数量。 TcpTimedWaitDelay设置为30。作用是将端口在 TIME_WAIT 状态下的等待时间从240秒缩短到30秒加快端口回收。4.重启电脑修改注册表后必须重启系统才能生效。 方案二优化 JMeter 自身的连接配置 在调整系统参数之前或之后都可以尝试通过 JMeter 配置来减少端口的消耗速度。WebSocket 通常建立在 HTTP 握手之上利用 HTTP 的连接池复用以减少 TCP 连接的频繁创建是关键。1.启用 Keep-Alive 与连接池 在 JMeter 的 HTTP 请求或 WebSocket 请求的握手阶段中勾选 “Use KeepAlive”。这允许多个请求复用同一个 TCP 连接显著降低对本地端口的消耗。2.调整 user.properties 在 JMeter 的 bin 目录下编辑 user.properties 文件加入以下配置以启用连接重试和更积极的连接管理 text httpclient4.retrycount1hc.parameters.filehc.parameters 并在同目录的 hc.parameters 文件中加入 text http.connection.stalecheck$Booleantrue方案三调整测试策略或采用分布式 如果单机端口资源在调优后依然捉襟见肘说明压测机的物理限制已经接近极限。 降低并发或增加思考时间减轻单位时间内对端口的瞬时消耗压力。 采用分布式压测如果单台机器无法满足测试目标可以使用 JMeter 的分布式模式多台 Slave 节点共同施压将端口压力分散到多台机器上。 建议优先执行方案一注册表调整这是解决该报错最直接有效的方法。测试项1.传输数据拦截测试 1不允许使用明文传输可以使用sm2(非对称加密)、sm4(对称加密)对数据进行加密 2且密钥不能以明文形式存储到文件本地文件、源文件中可以使用随机密钥在内存中存储。2.渗透测试 1防止渗透测试对接收的数据进行校验可以使用正则表达式校验 2对接收的数据长度、及数据有效性进行校验。3.登录绕过 1登录系统不能在未登录时进入系统页面 2可在数据库中或统一的处理程序中记录用户登录状态。4.sql注入 要防止sql注入风险。5.时效性 1添加时间戳校验超时请求则回复异常响应信息 2添加用户操作记录统计超时未操作则登录状态设置为掉线可后台单独进程处理需要重新登录。6.防止重放7.性能测试 1循环并发请求单次循环一般设置100个线程连接时间为10秒循环次数为100 2上边的设置导致了端口耗尽问题是jemeter工具所在机器的端口限制不是服务程序异常。优化策略1.接口耗时较长单独一个接口 测试正常选中多个线程组同时测试多个接口耗时较长添加缓存处理2.