`

如何解决在window下高并发TCP请求端口被占用问题

 
阅读更多

当客户端启动到服务器的 TCP/IP 套接字连接时,客户端通常连接到服务器上的特定端口,并请求服务器通过临时(或暂时)TCP 或 UDP 端口进行响应。在 Windows Server 2003 和 Windows XP 中,客户端应用程序所使用的临时端口的默认范围为 1025 到 5000。在某些情况下,有可能耗尽默认范围的可用端口。

TCP/IP 端口耗尽的症状随客户端应用程序的不同而不同,但通常都表现为显示网络连接失败错误。若要确定网络连接失败是否是由 TCP/IP 端口耗尽造成的,请在客户端计算机上执行以下步骤:

  1. 在运行 Windows XP 或 Windows Server 2003 的计算机上单击“开始”,再单击“运行”,然后键入 cmd,单击“确定”打开命令提示。

  2. 执行以下操作之一:

    • 在 Windows XP 或 Windows Server 2003 计算机上的命令提示中输入以下命令,显示此计算机上 TCP/IP 协议所使用的活动连接:

       
      netstat -n
      
      这将列出绑定到客户端计算机的 TCP/IP 地址以及 TCP/IP 地址与远程服务器通信所使用的端口。如果列出的端口使用了所有可用的端口,则出现了 TCP/IP 端口耗尽现象。

    • 在基于 Windows Server 2003 的客户端计算机的命令提示中输入以下命令,以显示 TCP/IP 协议所使用的活动连接:

       
      netstat -b
      
      这将列出绑定到客户端计算机的 TCP/IP 地址、TCP/IP 地址与远程服务器通信所使用的端口以及使用这些端口的应用程序。此信息可以帮助您确定那个客户端应用程序正在使用过多的 TCP/IP 端口。

与 TCP/IP 端口耗尽有关的问题

当客户端应用程序尝试使用 TCP/IP 套接字连接到 BizTalk Server,或当 BizTalk 应用程序尝试使用 TCP/IP 套接字连接到服务器时,可能会出现类似于下面的情况:

 
System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a send.

- 或者 -

 
Unable to connect to the remote server
System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted.

当出现这些错误时,还可能出现以下问题:

  • 客户端应用程序可能无法连接到 BizTalk Server。

  • BizTalk 应用程序服务可能无法连接到远程 SQL 服务器。

  • BizTalk Server 适配器可能无法连接到远程服务器。

  • 客户端应用程序预留的每个端口均占用内核内存。如果预留了数目超常的客户端端口,Windows 内核内存的占用率将相应增加。

原因

如果客户端计算机中存在数目超常的 TCIP/IP 套接字连接,则客户端计算机上可能出现 TCP/IP 端口耗尽的情况。如果多个客户端应用程序都在建立连接,则可能出现这种情况。

如果所有可用的临时端口都分配给了客户端应用程序,则客户端将出现 TCP/IP 端口耗尽的情况。当 TCP/IP 端口耗尽时,将无法预留客户端端口,并且尝试通过 TCP/IP 套接字连接到服务器的客户端应用程序也将出错。

在高负载情况下,比处于正常负载时更容易出现 TCP/IP 端口耗尽的情况。

解决方法

执行以下步骤以避免 TCP/IP 端口耗尽及其相关问题:

  1. 验证客户端应用程序没有生成过多的 TCP/IP 套接字连接。这一点可以用上面提到的方法来检查,即在 Windows Server 2003 和 Windows XP 上运行 netstat -n,或者在 Windows Server 2003 和 2008 上运行 netstat -b

    如果某个客户端应用程序使用了数量超常的 TCP/IP 套接字连接,则应考虑重新设计客户端应用程序,以便更有效地使用 TCP/IP 套接字连接。

    Aa560610.note(zh-CN,BTS.10).gif注意
    如果为 BizTalk 应用程序服务 (BTSNTSvc.exe) 实例预留了数量超常的客户端端口,则需验证配置为在 BizTalk 应用程序服务中运行的任何自定义代码都没有建立过多的 TCP/IP 套接字连接。

     

     

  2. 如果大量客户端应用程序要启动已知数量的 TCP/IP 套接字连接,但没有足够数量的可用临时端口来满足连接请求,则需要进行以下注册表修改。

    Aa560610.Caution(zh-CN,BTS.10).gif警告
    如果注册表编辑器使用不当,则可能会产生严重问题,导致重新安装操作系统。Microsoft 不保证可以解决因注册表编辑器使用不当而造成的问题。请慎用注册表编辑器,风险自负。在修改注册表之前,请务必备份注册表,并确保您知道在发生问题时如何使用备份进行还原。有关如何备份、还原及修改注册表的详细信息,请参阅 Microsoft 知识库文章“Microsoft Windows 注册表说明”,网址为 http://go.microsoft.com/fwlink/?LinkId=62729

     

     

    增加动态分配到客户端 TCP/IP 套接字连接的临时端口的上限。

    1. 启动注册表编辑器。

    2. 在注册表中,浏览到并单击以下注册表项。

      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

    3. 在“编辑”菜单中单击“新建”、“DWORD 值”,然后添加以下注册表值,以增加可以动态分配到客户端的临时端口的数量:

       

      值名称

      MaxUserPort

      值数据

      <在此输入一个 5000 到 65534 之间的十进制值>

    4. 关闭注册表编辑器。

      Aa560610.note(zh-CN,BTS.10).gif注意
      必须重新启动计算机,此更改才会生效。

       

       

      Aa560610.note(zh-CN,BTS.10).gif注意
      增加用于客户端 TCP/IP 连接的临时端口的范围将占用 Windows 内核内存。请勿将此设置的值增加至超过容纳客户端应用程序套接字连接所需要的值,以便尽可能降低对 Windows 内核内存的不必要占用。

       

       

    降低客户端 TCP/IP 套接字连接的超时值(默认值为 240 秒)

    1. 启动注册表编辑器。

    2. 在注册表中,浏览到并单击以下注册表项。

      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

    3. 在“编辑”菜单中单击“新建”、“DWORD 值”,然后添加以下注册表值,以缩短关闭连接时,该连接处于 TIME_WAIT 状态的时间。当连接处于 TIME_WAIT 状态时,套接字对无法重新使用:

       

      值名称

      TcpTimedWaitDelay

      值数据

      <在此输入一个 30 到 240 之间的十进制值。>

    4. 关闭注册表编辑器。

      Aa560610.note(zh-CN,BTS.10).gif注意
      必须重新启动计算机,此更改才会生效。

       

       

      Aa560610.note(zh-CN,BTS.10).gif注意
      此值的有效范围为 30 到 300(十进制)之间。默认值为 240。
分享到:
评论

相关推荐

    Windows下80端口被进程System占用的解决方法亲测可用.docx

    Windows下80端口被进程System占用的解决方法 在Windows系统中,如果启动IIS或者Apache时,可能会出现80端口被占用的情况。本文将详细介绍如何解决这种问题。 首先,我们需要了解什么是80端口。80端口是HTTP协议的...

    端口占用查询工具(windows)

    端口占用查询工具(windows),查询端口占用。 TCPView is a Windows program that will show you detailed listings of all TCP and UDP endpoints on your system, including the local and remote addresses and ...

    window下查看哪个端口被哪个进程占用着_查看占用端口的进程

    在Windows操作系统中,有时我们需要了解哪些进程占用了特定的端口,这通常是为了排查网络问题、优化服务配置或解决软件冲突。本篇文章将详细介绍如何在Windows环境下查看哪个端口被哪个进程占用,并提供两个实用的...

    window端好用的tcp端口转发工具

    window端好用的tcp端口转发工具,可实现端口映射,端口转发

    Linux/window下怎样查看某个端口被哪个程序/进程占用

    本篇将详细讲解在Linux和Windows操作系统下如何查看并管理占用端口的程序。 在Windows系统中,我们可以使用`netstat`命令来查看端口占用情况。`netstat -aon`命令会列出所有活动的连接和监听状态,其中 `-a` 参数...

    查看电脑端口被占用的工具

    通过该工具可以查看当前端口被占用的项目,并且可以看到占用该端口项目在window中所在位置

    Window下杀掉TCP连接

    "Window下杀掉TCP连接"这个话题涉及到的是如何管理和终止系统中的TCP(传输控制协议)连接。TCP是互联网协议的一部分,负责在两台设备之间建立可靠的数据传输通道。以下是一些关于在Windows中关闭TCP连接的重要知识...

    批处理关闭window被占用的端口

    输入查询的端口号码,如果被占用,则显示占用的该端口的PID。输入对应的PID即可将window系统中被占用的端口关闭掉

    window 端口占用处理.txt

    解决服务部署端口冲突,常用命令等。

    一键清除被占用com口

    标题"一键清除被占用com口"指的是一个工具或方法,能够快速解决COM端口被占用的问题,使得用户可以自由地重新分配或释放这些端口。这可能是通过清理注册表中的相关条目来实现的,因为注册表存储了系统关于COM端口...

    windows-如何查询端口号被哪个程序占用

    当遇到某个端口被占用,而我们不清楚是哪个程序在使用时,可以使用以下方法来查询: 1. **任务管理器**:在Windows系统中,可以通过任务管理器来查看当前运行的进程及其详细信息。打开任务管理器(快捷键Ctrl+Shift...

    window端口查看管理工具

    "Window端口查看管理工具"就是这样一个实用的软件,它能够帮助用户查看哪些程序占用了系统的TCP端口,并且允许用户进行必要的管理操作,如关闭不必要的进程。这个工具在排查网络连接问题、优化系统性能、防止恶意...

    windows环境下非常好用的TCP端口检测工具tcping

    windows环境下非常好用的TCP端口检测工具tcping,下载以后放到system32目录,命令行里面直接调用。 用法示例:tcping 1.2.3.4 80 检测1.2.3.4的80端口是否开放,比telnet好用。

    端口映射工具_TCPMAPPING

    1.本工具的是一款简单的安装在window系统上的端口映射工具。 2.使用场景,当一台windows可以访问公司内网,同时也有公网IP地址,就可以将内网某个IP提供的端口映射为公网IP上的端口。比如内网IP为192.168.100.4的...

    window10端口占用

    使用方法将文件名改为占用的端口,运行即可。如8888端口被占用,文件名改为8888.bat

    window端口转发工具

    windows好用的端口转发工具

    window下的端口号范围 .doc

    Window下的端口号范围是指Window操作系统中开放的端口号的范围,这些端口号可以被远程访问,可能会带来安全隐患。本文将详细介绍Window下的端口号范围、查看端口号的命令、关闭/开启端口的方法,以及如何在WinXP/...

    解决vue中使用proxy配置不同端口和ip接口问题

    在使用Vue开发项目的过程中,我们经常会遇到需要配置代理以解决跨域请求问题。当后端接口位于不同的IP地址和端口时,通过配置代理来模拟这些接口的环境尤为重要。本文将详细介绍如何在Vue项目中使用proxy配置不同...

    window 网络调试助手 tcp/udp

    window 网络调试助手 tcp/udp tcp server、tcp client

    Window通过cmd查看端口占用、相应进程、杀死进程等的命令.docx

    当我们在使用某些服务(如Tomcat服务器)发布应用时,可能会遇到端口被占用的情况。此时我们需要找出具体是哪个程序或进程占用了这个端口。 - **命令**: `netstat -ano | findstr "指定端口号"` 这个命令结合了两...

Global site tag (gtag.js) - Google Analytics