zoukankan      html  css  js  c++  java
  • .Net Core Socket 压力测试

    .Net Core Socket 压力测试

     

    想起之前同事说go lang写的push service单机可以到达80万连接,于是就想测试下.Net Core能达到多少。简单地写了全异步的服务端和客户端代码(未作任何优化)。测试环境只是笔记本18万连接CPU点26%左右内存点1.2G,目测放到服务器上80万还是有希望。

    一、测试代码

    服务端:启动TcpListener监听,异步接受客户端连接AcceptTcpClientAsync。连接到达后异步读取客户端数据,收到数据后原封不动发送到客户端。
    客户端:启动60个任务,每个任务依次异步连接到服务端,连接后启动数据收发任务,在收发任务中先改送140bytes左右的数据到服务端再读取服务端返回的数据,等待30s(Task.Delay)后循环前端的收发等待步骤。共60000个连接。
    数据统计:服务端客户端中都有相应的数据统计,统计数据有:已连接Socket数量、发送的数据包总数、接收数据包数总数。
    代码地址:https://github.com/chrishaly/TcpStressTest

    二、测试方式
    服务端:Windows 10,运行服务程序。
    客户端:(1)Windows 10和服务端同一机器(2)Windows Server 2012 R2 - VMWare(3)Windows 7 - VMWare。由于Winodws对连接数有限制需要修改注册表增大连接数HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters下添加DWORD值 MaxUserPort=65534。在客户端主机上运行客户端程序。3个客户端各6万连接只18万连接

    三、环境及结果(各进程详情)

    主机

    配置

    Socket连接数

    CPU占用

    内存占用

    服务端

    笔记本i7-4720HQ, 16G内存

    17.99万

    19% ~36%

     1.2G

    客户端Win 10

    笔记本i7-4720HQ, 16G内存

    6万

    5%

    241M

    客户端 Win 2012

    VMWare 1 CPU 1 Core, RAM 2G

    6万

    8%左右

    318M

    客户端 Win 7

    VMWare 1 CPU 4 Core, RAM 2G

    5.99万

    8%左右

    258M

    四、遇到的一些问题:主要也就Socket连接数限制,Windows上修改注册表即可。

    五、插曲:客户端本来是要用Linux的,先是用了Debian 8.6 x64连接数达到1.6万左右出现了问题,找了下Debian最大连接数ulimit –a没有限制,就没继续找原因了。果断开了Ubuntu Server 16.04 TLS连接也是1.6万左右出现了AddressAlreadyInUse的异常,然后又试了桌面版的Ubuntu 16.04 TLS也有此问题。目的是测试虚拟机太多了另外换一个吧,就用了VMWare Win 7, VMWare Windows Server 2012 R2。Debian、Ubuntu连接数据的问题以后再看。

    六、有图有真相: 4个运行窗口左上角那个是服务端

     


    服务进程情况:PID为19944的为服务进程

  • 相关阅读:
    day113-django-Form组件常用字段和参数
    day112-django-Form组件-ajax提交给后台的Form验证
    day110-django-中间件和(socket:wsgiref、uwsgi)
    day111-django-初识Form组件(验证登录信息)
    day109-django-多对多、session保存用户信息到数据库和从数据库获取用户信息
    day108-django-路由分发、动态路由、伪静态、根据名称反向生成url
    软件测试基础
    Python并发编程之:多进程
    进程介绍(理论部分)
    网络编程
  • 原文地址:https://www.cnblogs.com/chrishwang/p/net-core-socket-stress-test.html
Copyright © 2011-2022 走看看