背景
最近在查一个并发问题,在压测的时候,Nginx的error.log
显示connect() failed(111: Connection refused)
。而后端应用并未手工设置过拒绝连接。于是怀疑是在高并发的情况下,windows服务器可能存在自行拒绝连接的情况。
排查过程
首先打开windows服务器上的 任务管理器 - 性能 - 资源监控器。TCP连接这儿显示总数为100。
然后开启压测,TCP连接开始飙升,然后问题出现了。
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
的计数器。
这里就可以看到当前的实际连接数了,图里当前最新连接数是“824“,远超前面显示的”10“或者”100“。
看来一不小心又碰到坑了。
那么最开始要查的Connection refused
到底是什么原因呢,还得继续努力了。。。