connect failed error 10055 由于系统缓冲区空间不足……

2022-04-07 19:20:17 浏览数 (1)

事件查看器:由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作

程序日志:connect failed error 10055

参考:https://blog.csdn.net/bankpan/article/details/45293293

①调大动态端口范围,不用重启

netsh int ipv4 show dynamicport tcp可以先用这句命令查下当前的动态端口范围,显示的2个数,分别是起点、总数,终点即是起点 总数-1,例如下图,动态端口范围即是[5001,65535]

netsh int ipv4 set dynamicport tcp start=5001 num=60535

reg add "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters" /v "TcpTimedWaitDelay" /t REG_DWORD /d 30 /f

这2句调整的是下面2个注册表

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters

"MaxUserPort"=dword:0000f077

"TcpTimedWaitDelay"=dword:0000001e

改TcpTimedWaitDelay需要重启机器

注意:在win10和server2019的系统里,当执行调整tcp动态端口范围的命令时,不会自动生成MaxUserPort,无需人为干预,操作系统已经隐藏MaxUserPort;在<win10和server2019的系统里,执行调整tcp动态端口范围的命令时,会自动生成MaxUserPort。

MaxUserPort并不是最大用户端口号,而是最大用户端口数,其算法是tcp动态端口范围包含的端口数 1024。

比如执行netsh int ipv4 set dynamicport tcp start=10000 num=55535 ,tcp动态端口范围是10000~65534,共55535个端口,MaxUserPort是55535 1024=56559

如果执行netsh int ipv4 set dynamicport tcp start=49152 num=16384复原最初的动态范围会自动生成MaxUserPort=17408,tcp动态端口范围是49152 ~65535,共16384个端口,MaxUserPort是16384 1024=17408

我一般采用dynamicport tcp 5001~65535,即执行netsh int ipv4 set dynamicport tcp start=5001 num=60535

外加

<2012R2和Win8.1的系统,执行:

reg add "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters" /v "TcpTimedWaitDelay" /t REG_DWORD /d 30 /f

≥2012R2和Win8.1的系统,执行:

reg add "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters" /v "TcpTimedWaitDelay" /t REG_DWORD /d 2 /f

Key:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters

Value:

TcpTimedWaitDelay

Data Type:

REG_DWORD

Range:

Windows Server 2012 and earlier: 30-300 (decimal)Windows 8 and earlier: 30-300 (decimal)Windows Server 2012 R2 and later: 2-300 (decimal)Windows 8.1 and later: 2-300 (decimal)

Default value:

0x78 (120 decimal)

Recommended value:

30

Value exists by default?

No, needs to be added.

②核实句柄泄漏,解决句柄泄漏后方可彻底解决

如何确认是句柄泄漏?

powershell执行get-process|Measure-Object -Property Handles -Sum可以看句柄数

建议执行get-process|select -Property handles,processname|export-csv c:handle.csv -NoTypeInformation

将导出的csv用Excel打开分类汇总分析,一方面是看单个进程(可能存在多个同名进程)级别句柄数有无特别高的,另一方面是看按进程名汇聚后看句柄数有无特别高的,一般情况下,浏览器的句柄数都比较高可以忽略,主要看浏览器之外的

要看具体某个进程的句柄数的话,加个进程名,例如get-process chrome|Measure-Object -Property Handles -Sum

如果确认了是某个进程存在句柄泄漏,找开发这个程序的人来健壮代码

0 人点赞