Winsock IOCP服务器压力测试问题

时间:2011-08-30 14:00:58

标签: c++ client winsock iocp

我有一个使用TCP IP连接用c ++编写的winsock IOCP服务器。我已经在本地测试了这个服务器,使用环回地址和客户端模拟器。我已经能够让60,000多名客户毫无汗水。我遇到的问题是,我在家里运行服务器,在朋友家里运行客户端模拟器。一切正常,直到我们达到3700个连接,之后每次调用connect()都会从客户端失败并返回10060(这是winsock超时错误)。昨晚这个数字是3700,但之前已经有300左右,我们也看到它接近1000.但不管数字是多少,每当我们试图模拟它时,它都会在那个数字附近失败(在10左右)

两台计算机都使用Windows 7旗舰版。我们还将TCPIP注册表设置MaxTcpConnections修改为大约1600万。我们还将MaxUserPort设置从5000默认值更改为65k。事件查看器中没有显示有用的信息。我们都看了我们的资源监视器,我们甚至没有达到1%的网络利用率,CPU也接近0%的使用率。

我们刚刚通过我们的ISP取下电话了,他们说他们并没有以任何方式限制我们,但这个家伙有点不确定,最后在30分钟的停留时间之后还挂了我们...... < / p>

我们正在努力解决这个问题,但无法提出解决方案。如果那里有人可以帮我们解决这个问题,我会非常感激。

P.S。两台计算机都在Verizon FIOS上,具有相同的verizon路由器。另外需要注意的是,服务器使用的是WSAAccept而不是AcceptEx。客户端模拟器尝试连接很多秒,所以我很确定连接没有积压。我们试图改变客户端模拟器连接的速度,无论它设置的速度如何,每次都会以相同的数字失败。

UPDATE 我们在网络A上模拟了2个独立的客户端(在2台独立的机器上)。服务器在网络B上运行。每个客户端只能连接到服务器的一半(大约1600)连接。我们最初使用的端口低于1,000,已经改为50,000以上。两台机器上的路由器登录都没有显示。我们都使用Actiontec MI424WR verizon FIOS路由器。这让我相信问题不在于客户端代码。服务器不会抛出任何错误,也没有意外行为。这可能是ISP /路由器问题吗?

UPDATE 已找到解决方案。我们使用的verizon路由器(MI424WR版本C)无法处理超过3700个连接,我们使用一组单独的网络对其进行了测试。谢谢你的帮助!

由于 - 里克

1 个答案:

答案 0 :(得分:0)

我猜想这是一个MaxUserPort问题,但你说你已经改变了。更换后你重启了吗?

在本地网络上的完全相同的计算机上运行测试(这将使计算机脱离等式)。

问题可能是您的某个路由器无法胜任工作?