windows server2008 SP1 TCP端口耗尽分析报告

转自:MSSQL技术交流群 群友的文档

 TCP端口耗尽分析报告

1、问题描述

2022年4月1日早上10点左右收到客户报障说,OA系统的批处理作业无法运行。

  

2、环境描述

当前是一个2节点的故障转移群集数据库 版本为SQLServer 2008

3、问题分析

3.1  查看数据库报错信息

可以看到当前SqlServer 代理无法无法登录数据库执行相关作业,导致4月1日的作业没有任何作业自动执行

  


尝试手工执行其中一个作业报错如下,提示无法访问连接服务

  

 

 

通过分析,该链接服务器正常。

3.2  查看系统日志

   

通过分析系统的日志可以发现操作系统无法连接域控制器建立连接。通过测试发现当前节点无法与其它服务器建立连接,本地使用SSMS也无法连接,而别人是可以连接进来的。

通过查询微软官方网站发现如下相关错误信息。

端口消耗问题疑难解答 - Windows Client Management | Microsoft Docs

于是推测是由于TCP端口耗尽的问题。

3.3   查看操作系统版本

   

 

 

可以看到当前系统版本为windowsserver 2008 SP 1,这就与一个windows20008 TCP端口耗尽的bug联系起来了。

3.4  查看当前TCP端口使用情况

执行netstat -n 查看当前网络端口使用情况,可以看到当前本地端口已经使用到了65535端口。

  

 

 

3.5   查看TCP端口设置

可以看到当前TCP设置为默认起始端口为49152,端口数为16384,即最大端口数为65536已经被消耗殆尽

netsh int ipv4 show dynamicport tcp

  

从49152端口号开始 一直到65536 一共16384个 TCP动态端口

4、问题总结与处理建议

4.1   原因总结

  • OA批处理无法执行原因

批处理是通过SQL代理来执行的,SQL代理需要连接到数据库进行执行,SQL代理服务因为运行在节点63上面,它没有本地端口使用所以无法连接自己的SQLServer数据库执行作业,从而导致报错。

  • TCP端口被消耗殆尽的原因

cmd 运行 systeminfo   

  

当前操作系统为windows2008 SP1,查询系统的启动时间为2020年10月31日,到故障时间为止已经运行500多天,这应该是windows2008系统的一个bug<在操作系统运行497 天后未关闭 TIME_WAIT 状态的所有 TCP/IP 端口>,这也是导致批处理无法正常执行的根本原因。

4.2   临时解决办法

目前已经已经通过增加TCP端口个数暂时解决批处理问题。

1、请以管理员身份打开CMD,运行如下命令:
netsh interface ipv4 show tcpstats
netsh int ipv4 show dynamicport tcp
查看一下,是否端口耗尽,目前端口数量是多少,如果确认端口耗尽。
2、 增大动态端口数量
netsh int ipv4 set dynamicport tcp start=1025 num=60000
其中1025是起始端口号,num为数量,上述命令意思为从1025开始的60000个端口,到61025结束。
注:该步骤无需重启机器, 立即生效
修改后运行命令检查配置
3、 降低Time Wait时间,最低为30秒
打开注册表,定位到 HKLM/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters
新增键值 TcpTimedWaitDelay,类型REG_DWORD , 设置为十进制30
注:修改后重启生效
以上是对ipv4下的tcp协议操作,其他协议命令如下:
netsh int ipv4 show dynamicport tcp
netsh int ipv4 show dynamicport udp
netsh int ipv6 show dynamicport tcp
netsh int ipv6 show dynamicport udp
简单的例子如下:
netsh int ipv4 set dynamicport tcp start=10000 num=1000
netsh int ipv4 set dynamicport udp start=10000 num=1000
netsh int ipv6 set dynamicport tcp start=10000 num=1000
netsh int ipv4 set dynamicport udp start=10000 num=1000

 

4.3   后续解决方案建议

  • 定时重启操作系统避免运行时间超过497天。
  • 安装对应的BUG修复补丁。

参考连接:从系统启动,Windows Vista 中、 在 Windows 7 中,Windows Server 2008 中和在 Windows Server 2008 R2 中的 497 天后未关闭 TIME_WAIT 状态的所有 TCP/IP 端口 (microsoft.com)

posted @ 2022-04-06 11:14  郭大侠1  阅读(1335)  评论(0编辑  收藏  举报