首页 > 其他分享 >Http请求:Address already in use : connect

Http请求:Address already in use : connect

时间:2022-12-19 13:56:18浏览次数:45  
标签:use already Http 端口 TCP connect TIME 连接 WAIT

一、异常场景

性能测试发送大量http请求时,出现了java.net.BindException: Address already in use: connect异常【注:发送http请求使用的是短连接】

 

 

二、原因分析

http网络通信一般用的是TCP进行传输

TCP使用四元组(源地址,源端口,目的地址,目的端口)来标识一个TCP套接字。

高并发场景下客户端会占用大量的端口,如果这些端口没有释放就会出现端口不够用的情况,抛出java.net.BindException: Address already in use: connect异常。

 

源端口不够用

windows电脑端口总共有65535个,其中

① 0~1023(共1024个)为公认端口,紧密的绑定在一些特定服务上,如21端口就是FTP服务,80端口就是HTTP服务;

② 1024~49151(共48127个)为注册端口,松散的绑定于一些服务,如8080端口常常用于绑定tomcat服务;

③ 49152~65535(共16384个)为动态或私有端口;

49152~65535端口可用于TCP通信,注册端口中的部分端口,也会用于TCP通信,所以一台电脑可用的通信端口数量会稍微比16384多一点,但是也不会多太多,大概是16400+ 个

 

正常的TCP客户端连接在关闭后,会进入一个TIME_WAIT的状态,持续的时间一般在1~4分钟,对于连接数不高的场景,1~4分钟其实并不长,对系统也会有什么影响,但如果短时间内容进行大量的短连接,则可能出现这样一种情况:客户端所在的操作系统的scoket端口被用尽,系统无法再发起新的连接。

 

查看TIME_WAIT连接的命令:

windows系统命令:

在cmd下执行如下命令

netstat -ano |findstr 端口 |find /i  "TIME_WAIT"

 

加上 /c 可统计TIME_WAIT连接个数

netstat -ano |findstr 端口 |find /i /c  "TIME_WAIT"

 

linux系统命令

netstat -an |grep -i "端口" | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

 

三、解决方案

一、对系统进行调优

修改系统注册表

1、打开注册表:regedit

2、进入

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Services\TCPIP\Parameters

3、新建 DWORD值,name:TcpTimedWaitDe,value:10(十进制) –> 设置为10秒,默认是240秒  【如果有这一项则修改,没有则新建】

4、新建 DWORD值,name:MaxUserPort,value:65534(十进制) –> 设置系统当前端口可用范围为65534 【如果有这一项则修改,没有则新建】

5、重启系统使注册表新增配置生效

 

 

 

二、使用长连接

短连接最大的优点是方便,但短连接最大的缺点是将占用大量的系统资源,例如:本地端口、socket句柄。我们可以通过使用长连接来避免这个问题。

 

 

 

 

标签:use,already,Http,端口,TCP,connect,TIME,连接,WAIT
From: https://www.cnblogs.com/kiko2014551511/p/16991487.html

相关文章

  • When to use next() and return next() in Node.js
    Somepeoplealwayswritereturnnext()istoensurethattheexecutionstopsaftertriggeringthecallback.Ifyoudon'tdoit,yourisktriggeringthecallback......
  • Charles抓取浏览器https包
        谷歌浏览器导入证书,点击始终信任  ......
  • Java实现基本的HTTP/HTTPS请求 - 包含协议头
    importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStream;importja......
  • 图解HTTPS建立过程
    阅读目录​​准备工作(对应图中prepare1234)​​​​发起链接​​​​最后​​关于网络安全加密的介绍可以看之前文章:​​1.网络安全——数据的加密与签名,RSA介绍​​​​2.......
  • HTTP/3 原理实战
      2015年HTTP/2标准发表后,大多数主流浏览器也于当年年底支持该标准。此后,凭借着多路复用、头部压缩、服务器推送等优势,HTTP/2得到了越来越多开发者的青睐。不知不......
  • (原创亲测终极解决方法)场景报错Error -27492: "HttpSendRequest" failed, Windows erro
    网上的解决方法,总是千篇一律,能解决还好,就怕不找原因,转来转去还解决不了问题,我也对这个网友很无奈,即然不能解决,你转载他干嘛?不想看罗说的直接去下面看我的解决方法。网上解决......
  • C++ Web(HTTP)开发 10 大利器
    众所周知,C++并不是一种流行的Web开发语言,究其原因有很多:语言门槛高、使用难度大、开发效率低......话虽如此,​​但随着Emscripten的成熟,未来C++在Web方面会发挥......
  • Qt 之高级网络操作(HTTP/FTP 快速上手)
    简述QtNetwork模块中提供了一些高级别的类,例如:QNetworkRequest、QNetworkReply和QNetworkAccessManager,使用常见的协议执行网络操作。在分享的过程中,顺便介绍下Fiddler......
  • HTTP工作原理、请求方法、请求/响应步骤、Request/Response示例
    HTTP简单介绍HTTP是超文本传输协议,定义了客户端与服务器端之间文本传输的规范。HTTP默认使用80端口,这个端口指的是服务端的端口,而客户端使用的端口是动态分配的。当我们没有......
  • 网站打算使用 https 协议
    Https协议加密更安全,我打算让网站支持https。不过当前使用的PortableAllegroServe好像对https支持得不太好,而另一个LispWeb服务器软件Hunchentoot也是支持htt......