iocp最大保持连接数如何进一步提高

时间:2022-06-01 21:40:03
我用IOCP实现了一个TCP服务端,由于特殊需求客户端几乎是全天保持在线的,使用TCP就意味着需要一直保持这个Socket。目前服务端已经完成。但在压力测试的时候,支持同时连接的客户端数量为3700人。超过这个数字就不再接受新的连接了。ACCEPTEX函数不再返回。

此时查看任务管理器,服务端进程的句柄数量为9999,但内存和CPU占用都微乎其微。我想可能是Windows限制了单个进程的最大句柄数量,导致只能接受3700个连接。有什么办法扩大这一数字吗?

调试发现,IOCP每增加一个连接,要耗费三个句柄。查了一些资料,Windows确实限制单个进程的最大句柄数量。 不知道IIS支持多少同时保持连接的,他怎么做到的。

7 个解决方案

#1


1.什么操作系统?建议使用server版的进行测试,比如Windows 2003 Enterprise + SP2
2.操作系统当中安装了什么防病毒软件,比如象江民之类的就会锁连接数;
3.最大连接数可以达到10万的理论值,实测可以达到5~6万

#2


我用的是2003Server 服务器很干净,没有装任何东西。连接数每增加一个在任务管理器能看到进程增加了3个句柄,句柄打到1万的时候就无法建立新连接了。ACCEPTEX函数不再返回。 大概也就是3300多链接就无法接受新的连接了。

很是郁闷。

#3


晕,不知道你们怎么搞的我测试的话压力单连接可以到2-3W.带宽100M全满

#4


"3.最大连接数可以达到10万的理论值,实测可以达到5~6万"
能有10W? port最大也就是65535你怎么来10W

#5


引用 4 楼 codegame 的回复:
"3.最大连接数可以达到10万的理论值,实测可以达到5~6万" 
能有10W? port最大也就是65535你怎么来10W

accept的连接,只是一个session,受限的是内存,与之相关的是socket描述符,而不是port,实际上它是以ClientIP+ClientPort+ServerIP+ServerPort作为唯一性确定的.

#6


引用 2 楼 manors 的回复:
我用的是2003Server 服务器很干净,没有装任何东西。连接数每增加一个在任务管理器能看到进程增加了3个句柄,句柄打到1万的时候就无法建立新连接了。ACCEPTEX函数不再返回。 大概也就是3300多链接就无法接受新的连接了。 

很是郁闷。

不知道测试环境是如何的,是否是因为客户端受到限制.每一个系统连出的连接数确实是相当有限的,在这种情况下,只能增加机器,或者修改注册当中的设置.最大连出连接数可以达到60000左右.

#7


请搞到7W连接客户端给我看看

#1


1.什么操作系统?建议使用server版的进行测试,比如Windows 2003 Enterprise + SP2
2.操作系统当中安装了什么防病毒软件,比如象江民之类的就会锁连接数;
3.最大连接数可以达到10万的理论值,实测可以达到5~6万

#2


我用的是2003Server 服务器很干净,没有装任何东西。连接数每增加一个在任务管理器能看到进程增加了3个句柄,句柄打到1万的时候就无法建立新连接了。ACCEPTEX函数不再返回。 大概也就是3300多链接就无法接受新的连接了。

很是郁闷。

#3


晕,不知道你们怎么搞的我测试的话压力单连接可以到2-3W.带宽100M全满

#4


"3.最大连接数可以达到10万的理论值,实测可以达到5~6万"
能有10W? port最大也就是65535你怎么来10W

#5


引用 4 楼 codegame 的回复:
"3.最大连接数可以达到10万的理论值,实测可以达到5~6万" 
能有10W? port最大也就是65535你怎么来10W

accept的连接,只是一个session,受限的是内存,与之相关的是socket描述符,而不是port,实际上它是以ClientIP+ClientPort+ServerIP+ServerPort作为唯一性确定的.

#6


引用 2 楼 manors 的回复:
我用的是2003Server 服务器很干净,没有装任何东西。连接数每增加一个在任务管理器能看到进程增加了3个句柄,句柄打到1万的时候就无法建立新连接了。ACCEPTEX函数不再返回。 大概也就是3300多链接就无法接受新的连接了。 

很是郁闷。

不知道测试环境是如何的,是否是因为客户端受到限制.每一个系统连出的连接数确实是相当有限的,在这种情况下,只能增加机器,或者修改注册当中的设置.最大连出连接数可以达到60000左右.

#7


请搞到7W连接客户端给我看看