查看: 1151|回复: 0

【NanoPI-NEO】失败的测试,最大TCP连接数

[复制链接]
  • TA的每日心情
    奋斗
    2022-9-16 05:52
  • 签到天数: 1368 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2016-12-8 08:52:42 | 显示全部楼层 |阅读模式
    分享到:
    golang最大的特点,就是天生支持协程。而协程是什么呢?协程是一种轻量级的线程,比线程占用的资源更小,而且每个协程之间是共享变量空间的,所以切换起来更加快速。至于协程应用的场景很多,最常见的恐怕就是大量的TCP连接了。一台服务器会接受众多的客户端连接来获取数据,有些类型的连接可能会在客户端取得数据后就断开,这样的连接就是短连接,比如HTTP。但是也有相当一部分的要求不能断开连接,持续的交互数据,这种长连接对服务器的要求就很高了。为了容纳更多的连接数,一般在Linux采用epoll方式,Windows上就IOCP了,这两种方式代码写起来并不通用。而golang则处理的很好,采用最简单的常规阻塞方式开发服务器程序,每一个客户端请求就开一个协程,程序写起来又省事有高效,完全可以替代前面这两种方式,所以这次测试就用golang来实现。
            NanoPI-NEO很小,不光体积小,连内存也小,也没有诸如视频输出等接口,当作桌面PC来用那是不可能的了,但是如果当成一个服务器又能够承受多少个连接呢?我手上的这个NEO是512M的内存,就用它来尝试一下TCP的连接数吧。系统采用友善之臂原厂提供的UbuntuCore镜像,由于没有emmc,使用的是TF卡来装系统,所以在磁盘的读写速度上是一个最大的瓶颈。好在这个测试完全基于内存来操作,可以将这个短板的影响降低到最小。

            程序没有什么特别的,就是一个TCP Server,在接收到客户端发送的数据后原封不动的返回。同时程序可以接受输入命令,如果命令为"TCP",就打印出当前连接的TCP Client的数量,方便查看。编译、运行不再重复。

            从网上找了一个可以产生大量TCP连接的工具,设置为单个程序打开的数量为16000个,并且每个连接间隔60秒发送一个100字节的数据。该程序可以统计出总的发送和接收到的数量,还可以用图表来显示,比较直观。
            开始运行后,第一个程序已经发起了16000个连接。

           因为没有视频输出的接口,所以采用了SSH方式来运行服务器程序,并且又通过USB连接到了NEO的调试串口,这样可以同时查看服务程序的器运行情况,也可以随时查看当前内存的占用量,想显示当前CPU温度也没问题。
            可以看到系统初始占用为90M,当16000个连接进来后,内存就到了183M,也就是使用了93M的内存。
            以此类推,32000个连接会占用276M左右的内存,那么512M的NEO应该可以支持至少6W个连接。会达到这种效果吗?下面继续测试。

            又打开一个测试工具的程序,是不是很奇怪为什么这次才设置了15000个连接。因为16000个连接失败了,呵呵。不管将系统怎样设置,始终不能超过15685个连接,而同样的设置在PC上是完全可以达到几十万个连接的,可能系统中还有一些地方有限制。为了演示,所以先将连接数设定为15000,那么现在的总数就是31000个。

            此时内存占用达到了276M,比预期的多占用了一些,那么如果将内存全部占满后的总连接数可能是达不到6W个了。但是开机后系统本身占用了90多M的内存,所以实际连接使用的内存也就是不到200M。
            经过整个晚上翻来覆去的修改系统设置,始终没有超过31685个连接,本次测试以失败而告终。后面如果有时间我打算换系统再进行测试一下。

           另外再说一下NEO的网络,使用内置百兆的网口很吃亏,再加上CPU的性能稍弱,所以不要有太高的期望。当然对于一个只有几十块钱的板子来说还是可以接受的,如果能够换成千兆网络芯片性价比则会大大提高。
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-27 04:32 , Processed in 0.123645 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.