2011-08-30 57 views
2

我有一个使用TCP IP连接的C++编写的winsock IOCP服务器。我已经在本地测试了这个服务器,使用客户端模拟器的环回地址。我已经能够获得超过60,000客户没有汗水。我遇到的问题是当我在家中运行服务器并在朋友家中运行客户端模拟器时。一切正常,直到我们打了3700个连接,之后,每次connect()调用失败,客户端返回10060(这是winsock超时错误)。昨晚这个数字是3700,但是它已经在300以前了,我们也看到它接近1000.但是无论数量是多少,每次我们试图模拟它时,它都会绕着这个数字失败(在10个左右) 。Winsock IOCP服务器压力测试问题

这两台电脑都使用Windows 7旗舰版。我们还将TCPIP注册表设置MaxTcpConnections修改为约1600万。我们还将MaxUserPort设置从5000的默认值更改为65k。没有有用的信息显示在事件查看器中。我们还观看了我们的资源监视器,并且我们还没有获得1%的网络利用率,CPU也接近0%的使用率。

我们刚刚和我们的ISP断开电话,他们说他们不以任何方式限制我们,但这家伙有点儿不确定,最终在30分钟的时间内挂断了我们。

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

P.S.这两台电脑都在Verizon FIOS上,配有同样的verizon路由器。另外需要注意的是,服务器使用WSAAccept而不使用AcceptEx。尽管客户端模拟器尝试连接了很多秒,所以我很确定连接不会累积。我们试图改变客户端模拟器连接的速度,不管它设置的速度是多少,每次都会失败。

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

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

感谢 - 里克

+0

尝试使用数据包嗅探器(例如wireshark)来确定问题 – Hasturkun

+0

我下载它并尝试一下,我之前没有使用过,所以我不确定要查找什么。它是否会向您显示发生的错误,还是我只需要检查低级别的数据包并自行确定发生了什么? – Rick

回答

0

我也能猜到这是一个MaxUserPort的问题,但你说你已经改变了这一切。更改后重新启动了吗?

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

这个问题可能是你的路由器不能胜任这项工作?

+0

感谢您的回复。是的,我们在过去几天重新启动并处理了这个问题。我还没有通过本地网络进行测试,我会看看我是否可以做到这一点,并让你知道发生了什么。 – Rick

+0

此外,恰好可以在路由器做些什么来防止这种代码的工作(这哪里会失败?) – Rick

+0

我会感到惊讶,如果它是路由器,但也许,如果它是一个廉价的家用路由器,它不能够处理许多并发连接... –