websocket 70K连接测试

最近使用socket.io做了一个实时应用,实时性、稳定性还是很让人满意的。如果拿socket.io来做小型应用,综合效率应该是最高的。但是网上少有socket.io做大量连接测试的案例,这是比较让人担心的一点,socket.io是否适合做具有大量连接场景的需求呢?Trello其实就是用socket.io来处理实时通信的,而且trello目前已经有数百万的用户了,所以从这点看,socket.io的规模应用应该还是可行了。

为了以防万一,我想拿websocket([https://github.com/websockets/ws][1])做后备应用,并且找到了国外网友的测试代码,我稍微改了下,代码比较简单,自己写一份也可以,但对于了解一台普通的PC能够支撑的连接数量,已经够了。测试的结果也比较满意,以后可以放心用websocket来做应用了。

测试的内容包括:

  • win7测试
  • win7修改PC最大连接数
  • ubuntu14.04测试
  • ubuntu14.04修改最大连接数

1. 代码说明

服务端代码功能:
  • 接收连接,连接到来时计数器加1
  • 连接断开时,计数器减1
  • 在定时器中打印系统资源占用状态
客户端代码功能:
  • 循环建立10K(或20K)连接【建议10K,数量过大时,成功连接的数量可能会比较小,所以小批量,多个实例】
  • 连接建立时,将连接压入数组
  • 连接断开时,将连接移出数组
  • 在定时器中打印连接数量
  • 每个连接建立时,发送一定的消息到server【如果消息发送量过大,注意修改server的接收缓冲区大小
  • 建立client代码的副本,方便修改连接数。【不管是windows还是linux环境,建议使用多个client副本,以方便调整连接数

2. win7测试

在win7中测试时,如果不修改win7的注册表连接限制,server只能接收13K左右的连接,再继续建立连接时,就会报event.js的错误

3. win7修改PC最大连接数

步骤:

  • 打开注册表,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters,
  • 新建一个名为MaxUserPort的键,设置其值为65534
  • 再新建一个名为TcpTimedWaitDelay的键,设置其值为50

保存,然后重新运行client连接,可以发现已经可以突破默认的限制了。我只加到了30K连接,没有再继续加多。【在linux服务测试中,需要win7有足够的连接。】

注意:如果注册表中找不到需要的键值,自己新建

4. ubuntu14.04测试

测试条件:

  • 我的ubuntu14.04运行在visualBox中,最开始分配的内存是2G。
  • 我一开始就修改了ubuntu的file限制,将上限改成了500,000
  • 直接把win7下的测试代码拷贝到linux中运行,开启多个client实例。

测试现象:

  • 当建立大约4oK连接时,连接数停留在这里了。查看linux file数量,发现已经到500000,再次修改file限制,改为1,000,000
  • 在ubuntu中启动的连接数达到45K左右时,继续在ubuntu中开启client实例,不能够继续建立连接了。(此时开始在win7中建立到ubunut的连接)
  • 在win7中开启client连接,当建立连接数达到55K左右时,server总是被linux Killed。此时,我关闭了虚拟机,调整虚拟机的分配内存为3GB,再次开始测试。
  • 继续在win7中开启client,我一共开启了3个实例,共30K连接。ubuntu中开启了4个实例(20K一个,10K3个,只能保持45K左右的连接),ubuntu内存占用大概1.2GB,此时建立的连接数达到了75K。

5. ubuntu14.04修改最大连接数

步骤

  • 配置 /etc/security/limits.conf,文件尾追加
    * hard nofile 1000000
    * soft nofile 1000000
  • 编辑/etc/pam.d/common-session
    加入一行
    session required pam_limits.so
  • 编辑/etc/profile,加入
    ulimit -SHn 51200

注意:我没有调整linux内存方面的设置,仅仅只是调整了分配给虚拟机的内存

6. 结论

我不想在这里妄下结论,只是测试现象可以让我确定,nodejs 使用websocket来处理大量连接的场景是可行的。
[1]: https://github.com/websockets/ws

posted on 2017-08-13 12:12  猫不白  阅读(1913)  评论(0编辑  收藏  举报

导航