Windows Server 2018 TCP 连接数限制问题

背景

最近在查一个并发问题,在压测的时候,Nginx的error.log显示connect() failed(111: Connection refused)。而后端应用并未手工设置过拒绝连接。于是怀疑是在高并发的情况下,windows服务器可能存在自行拒绝连接的情况。

排查过程

首先打开windows服务器上的 任务管理器 - 性能 - 资源监控器。TCP连接这儿显示总数为100。

tcp_conn_100

然后开启压测,TCP连接开始飙升,然后问题出现了。

tcp_conn_10

TCP连接满了,怎么就变成10了!不过瓶颈应该就是这儿了!

结论

经过各种百度,谷歌,发现我好像被误导了。

微软官方说从Windows Vista,Window server 2008 SP2 起,不在限制half-open TCP connections,也就是理论上不再有连接数的限制。

官方说明见这个地址:https://support.microsoft.com/zh-cn/help/969710/how-to-enable-the-half-open-tcp-connections-limit-in-windows-vista-wit

然后根据国外有个问答网站的结论,这个“10”,“100”这个显示应该是个Bug,并不是一共就10个或者100个。

可参考如下这个解释:

https://serverfault.com/questions/448589/increasing-of-max-more-than-10-tcp-connections

那么怎么看确定的连接数呢?

在 开始 - 运行 中输入 perfmon.exe打开性能监视器,然后添加TCPv4的计数器。

tcp_perfmon

这里就可以看到当前的实际连接数了,图里当前最新连接数是“824“,远超前面显示的”10“或者”100“。

看来一不小心又碰到坑了。

那么最开始要查的Connection refused到底是什么原因呢,还得继续努力了。。。