注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

转载:完成端口模型:并发连接数达到9.1万  

2010-09-23 12:09:16|  分类: 网络服务编程技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

完成端口模型:并发连接数达到9.1万!

网络开发 2010-05-20 17:52:21 阅读219 评论0   字号:大中小 订阅

1.  2W。太高兴了!但是它还仅仅是2W。我把程序的最大连接数改成了2W,所以,到了2W之后,连接数就没再继续增加了。

不过,这也说明了一件事情,在Windows XP中,1.6W不一定是瓶颈。

——此前,我曾改动过一个系统注册表项。暂时不清楚是不是这个改动导致连接数上限增加的,继续观察,,,

2.  达到了4W,哈哈!还是单机同时运行客户端+服务器端!

出现的问题:

        (1)前次的内存溢出BUG并未真正解决,还在跟踪;

        (2)Hash表经过上次的改动后,效率大降!在连接数为1W以内时,每秒响应上千个连接请求;在达到2W之后,每秒只能响

应数百个客户端连接请求!

3.  5W了!

        此时,每秒响应客户端连接只能达到几十个了!这时候,我想起了链表设计上的一个问题。我每次插入一个链表前,总是

先查询链表上是否已经存在这个节点!

        本来速度就慢了,还查询!结果,速度更慢!

        我应该增加游标功能。之前的内存池使用了游标,现在的hash链表也应该采用!——三个问题:内存溢出、插入前不应该

查询、增加游标。

        如果能超过6.5W的瓶颈,那就直接意味着,Windows XP上,也可以跑到十几万的了!

 4. 本轮测试最终结果:5.6W

        客户端响应越来越慢,除了程序本身的瓶颈以往,系统也存在瓶颈!

        根据观察结果,系统最终分配了15万个Socket,成功连接的套接字为11万个。而系统在分配套接字时,速度上似乎越来越

慢!
        两次的最终结果,都只能达到5.6W,最后,系统提示Bind绑定端口失败,即,此时系统没有足够多的可用端口了!此其一
        此外,之后创建套接字也失败。由此可见,系统的套接字资源枯竭了!此其二。

        游标只能加速资源分配,却不能加速节点查找和资源释放,所以,这里不适合加入游标!此其三。

        套接字关闭前,应该取消所有的IO操作!此其四。

        内存溢出是目前的最大问题,应该好好跟踪!已经两天了,还是没法查出原因!此其五。

        如果多机联机测试,并发数达到十几万,应该是轻而易举的,可惜,目前只有两台机器,可能很难达到这个数目了。
5.  多机测试结果
        首先得更正一点。前面提到,连接数过高时,效率降低,我怀疑windows系统也有责任。——这种看法是错误的,是因为我

在关闭套接字之前,没有取消IO。加上CancelIO,即可!
        其次,另外一台机器只能开3.2W。所以,由此断定,本机连接数之所以突破了1.6W限制,乃是修改注册表之故!后面会给

出修改注册表的方法,供大家参考!
       最后,Release版本,十秒内,建立起了2W个连接数,性能非常不错,每秒可以达到2千个!我想,其实还可以更高!因为客

户端的压力测试程序本身,是单线程发起TCP连接,一个线程每秒发起2千个TCP连接,这几乎已经是极限了,如果是多个客户端同时

运行压力测试,服务器端响应速率更高一点,每秒几千,不是没有这个可能。
6.  达到9.1万!

        双机测试。A机运行服务器端,B机器运行客户端压力测试程序。

        连接数达到6.1万之后,不能再发起新的连接!可以理解,毕竟是笔记本电脑,配置跟不上。

        为了发挥最大潜力, @机也运行客户端压力测试程序,于是,连接数升高到9.1万。

        和前几次相同的是,本机的驱动层句柄数达到15万,之后,无法发起新的连接!由此得出结论,不是别的问题,正是这15

万的句柄数限制,使得连接数不能更高。
        那么,能不能更高呢?个人认为,是可以的。我估计,最大可以达到12万。因为单机测试时,当连接数达到6万时,驱动层

的句柄数目达到了15万。也就是说,6万的服务器端套接字句柄+6万的客户端套接字句柄,这就是极限:12万的套接字句柄。
        15-12=3。那么,另外的3万句柄是怎么回事?我也不清楚。
        不过,考虑到最多12万的套接字,所以,最大的并发连接数为12万。也就是说,如果本机不运行客户端压力测试程序,只

运行服务器端程序,最大连接数可以达到12万。
        还是很失望的。离一百万还有一大截距离!距离网上说的几十万,也还是相差一大截的。不过,毕竟是XP系统,如果是

2003 Server或者2008 Server版本,应该可以更高的吧。
        总结: 完成端口+重叠IO模型,作为Windows平台最优秀的服务器模型,其性能确实优异!虽然,在测试过程中,达到了

9.1万的并发数,而个人推算,理论值为12万,但是,实际使用中,几万个连接数应该就是相当不错了!毕竟实际运用时,还得处理

大量数据的。


附录:增加Windows Xp系统的最大并发连接数

http://zhanyonhu.blog.163.com/blog/static/16186044201042084631747/

摘自:http://www.cublog.cn/u2/61062/showart_2194214.html

在模拟客户端程序对应的机器上,需要修改注册表:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下

TcpNumConnections

Key: Tcpip\Parameters

取值类型:REG_DWORD - Number

取值范围:0 - 0xfffffe

缺省值:0xfffffe

描述:本参数限制可以同时打开的TCP连接的数量

  评论这张
 
阅读(940)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017