目标:测试创建1000万客户端连接到服务器端,服务器操作系统 Linux(任意一款发行版服务器版本)。分别在两台硬件一样的服务器,其中一台用于服务器端运行,另一台用于创建千万客户端连接客户端机器。在硬件一致的情况下请确保网络设备达到相关测试要求,例如万兆网络等等。

服务器硬件配置

Dell Inc.
型号 PowerEdge R430
CPU 8 CPUs x Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
内存 64 GB //测试客户端机器内存升级到96 GB

需要测试千万级连接,确保测试工具独占服务器,并硬件内存大于或等于256GB,由于测试硬件资源受限,以400万连接数据测试结果作为参考依据,单机千万连接完全有可能达到。当商业应用时需要考滤高连接的self-ddos问题,应该尽量设置更长的客户端keepalive值。

服务端系统参数调优(Linux)

修改文件/etc/sysctl.conf,配置网络参数。

net.ipv4.tcp_wmem = 4096 87380 4161536
net.ipv4.tcp_rmem = 4096 87380 4161536
net.ipv4.tcp_mem = 786432 2097152 3145728
fs.file-max = 12000000 #一千两百万

执行/sbin/sysctl -p即时生效。

 
echo 12000000 > /proc/sys/fs/nr_open #需root权限

/etc/systemd/system.conf 设置服务最大文件句柄数:

 
DefaultLimitNOFILE=12000000

修改/etc/security/limits.conf文件

* hard nofile 12000000
* soft nofile 12000000
* soft nproc 12000000
* hard nproc 12000000

需重启系统生效,服务器操作系统参数调优完成。关于启动CP7服务器端程序请参阅本章中的《程序安装》小节

客户端的参数调优(Linux)

根据TCP/IP协议,由于端口是16位整数,也就只能是0到 65535,而0到1023是预留端口,所以能分配的端口只是1024到65534,也就是64511个。一台机器一个IP只能创建六万多个长连接。 要想达到更多的客户端连接,可以用更多的机器或者网卡,也可以使用虚拟IP来实现,比如下面的命令增加了19个IP地址,其中一个给服务器用,其它18个给client,这样可以产生18 * 60000 = 1080000个连接。本测试用例需要增加到一千万或以上的足够IP。

root@:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:16:3e:0b:2e:a0
inet addr:x.x.x.x Bcast:x.x.x.x Mask:255.255.240.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4706185 errors:0 dropped:0 overruns:0 frame:0
TX packets:4705832 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1005604068 (1.0 GB) TX bytes:5556912863 (5.5 GB) lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:5875416 errors:0 dropped:0 overruns:0 frame:0
TX packets:5875416 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:3566710813 (3.5 GB) TX bytes:3566710813 (3.5 GB)

以上指令查看到网卡名称为 eth0

 
ifconfig eth0:0 192.168.77.10 netmask 255.255.255.0 up
ifconfig eth0:1 192.168.77.11 netmask 255.255.255.0 up
ifconfig eth0:2 192.168.77.12 netmask 255.255.255.0 up
ifconfig eth0:3 192.168.77.13 netmask 255.255.255.0 up
ifconfig eth0:4 192.168.77.14 netmask 255.255.255.0 up
ifconfig eth0:5 192.168.77.15 netmask 255.255.255.0 up
ifconfig eth0:6 192.168.77.16 netmask 255.255.255.0 up
ifconfig eth0:7 192.168.77.17 netmask 255.255.255.0 up
ifconfig eth0:8 192.168.77.18 netmask 255.255.255.0 up
ifconfig eth0:9 192.168.77.19 netmask 255.255.255.0 up

以上指令操作增加虚拟IP,添加完成后通过 ifconfig 指令查看确认所有虚拟IP最已列出。

修改/etc/sysctl.conf文件:

 
fs.file-max = 12000000
fs.nr_open = 12000000
net.ipv4.ip_local_port_range = 1024 65535

执行/sbin/sysctl -p即时生效。

 
echo 12000000 > /proc/sys/fs/nr_open #需root权限

/etc/security/limits.conf配置

 
* soft nofile 12000000
* hard nofile 12000000
* soft nproc 12000000
* hard nproc 12000000
使用Coolpy7_benchmark测试客户端测试四百万级连接
 
# 下载测试工具
git clone https://github.com/Coolpy7/coolpy7_benchmark.git
# 进入bin文件夹
cd bin # 启动Coolpy7静连接测试工具
# 参数url: Coolpy7服务端所在服务器ip地址,默认端口号:1883
# 参数workers: 需要创建的客户端连接数量
# 参数cid: mqtt连接客户端(ClientId)前缀,工具会自动以cid+WorkersId作为连接clientid值
# 参数topic: 连接成功后订阅的topic主题(支持以%i取得workersid:例: mytopic%i)不进行订阅测试填写null字符串
# 参数keepalive: 连接ping时间间隔
# 参数clear: mqtt客户端连接的clearsession属性,当设置为true时重连时不能再次订阅qos0以上的主题
# 以下例示建立连接到192.168.200.238所在的Coolpy7服务器端,并创建400万个MQTT客户端连接
./go_build_cp7_bench_sub_go_linux -workers=4000000 -cid=tqy -topic=null -qos=0 -url=tcp://192.168.200.238:1883 -keepalive=60000s -clear=true
 

客户端连接数

系统使用内存

RES使用内存

VIRT使用内存

CPU使用

网络(进)

网络(出)

100万

4.5G

2633M

2789M

260/1600

2.8M

2M

200万

10.3G

4009M

4152M

277/1600

2.98M

2.15M

300万

14.7G

5517M

5682M

278/1600

3.05M

2.21M

400万

19.3G

7055M

7231M

270/1600

2.91M

2.18M

测试时需时刻关注服务器端网络资源使用情况,测试数据显示在高连接数下ping/pong状态下已占用极大的网络带宽,需根据当前设备的硬件资源合理设置最大连接数量以保证系统的稳定长期运行

相关测试截图
服务器端启动并host于1883 TCP端口
通过HTOP工具监测Coolpy7(连接时)硬件资源占用情况
通过NLOAD工具监测Coolpy7(连接时)网络资源占用情况
使用Coolpy_benchmark工具测试连接400万连接
 

从服务器端的硬件资源使用情况得出结论单机千万级连接即可实现,如阁下有相关硬件设备实测千万级用例,请把测试结果告知Coolpy7官方。感谢!

  1. 工具会以1000为单位打印连接信息

  2. 工具启动后会一直创建参数指定的客户端连接数

按应用场景测试

MQTT 是一个设计得非常出色的传输层协议,在移动消息、物联网、车联网、智能硬件甚至能源勘探等领域有着广泛的应用。1个字节报头、2个字节心跳、消息 QoS 支持等设计,非常适合在低带宽、不可靠网络、嵌入式设备上应用。

不同的应用有不同的系统要求,用户使用Coolpy7消息服务器前,可以按自己的应用场景进行测试,而不是简单的连接压力测试:

  1. Android 消息推送: 推送消息广播测试。

  2. 移动即时消息应用: 消息收发确认测试。

  3. 智能硬件应用: 消息的往返时延测试。

  4. 物联网数据采集: 并发连接与吞吐测试。

单机千万级MQTT连接服务器测试报告的更多相关文章

  1. MQTT连接服务器返回2

    /********************************************************************************* * MQTT连接服务器返回2 * ...

  2. IM服务器:我的千万级在线聊天服务器集群

    一.服务器特点 01.傻瓜式部署,一键式启动: 02.单机支持10万以上在线用户聊天(8G内存,如果内存足够大,并发量可超过10万): 03.支持服务器集群,集群间高内聚.低耦合,可动态横向扩展IM服 ...

  3. C10K——千万级并发实现的秘密:内核不是解决方案,而是问题所在!(转)

    既然我们已经解决了 C10K并发连接问题,应该如何提高水平支持千万级并发连接?你可能会说不可能.不,现在系统已经在用你可能不熟悉甚至激进的方式支持千万级别的并发连接. 要知道它是如何做到的,我们首先要 ...

  4. 开源libco库:单机千万连接、支撑微信8亿用户的后台框架基石

    微信于2013年开源的ibco库,是微信后台大规模使用的c/c++协程库,2013年至今稳定运行在微信后台的数万台机器上.libco在2013年的时候作为腾讯六大开源项目首次开源,ibco支持后台敏捷 ...

  5. 百万级开源MQTT消息服务器 搭建

    下载地址:http://emqtt.com/downloads 文档地址:http://emqtt.com/docs/v2/index.html 开始使用EMQ 2.0 消息服务器简介EMQ (Erl ...

  6. 知乎千万级高性能长连接网关 https://zhuanlan.zhihu.com/p/66807833

    知乎千万级高性能长连接网关揭秘 9 天前 · 来自专栏 知乎技术专栏 实时的响应总是让人兴奋的,就如你在微信里看到对方正在输入,如你在王者峡谷里一呼百应,如你们在直播弹幕里不约而同的 666,它们的背 ...

  7. mqtt网关服务器连接阿里云关联物模型

    mqtt网关服务器连接阿里云关联物模型 卓岚专门为工业环境设计的RS485设备数据采集器/物联网网关,兼具串口服务器.Modbus网关.MQTT网关.RS485转JSON等多种功能于一体. 可以连接阿 ...

  8. Mysql千万级大表优化

    Mysql的单张表的最大数据存储量尚没有定论,一般情况下mysql单表记录超过千万以后性能会变得很差.因此,总结一些相关的Mysql千万级大表的优化策略. 1.优化sql以及索引 1.1优化sql 1 ...

  9. dotnet core使用IO合并技巧轻松实现千万级消息推送

    之前讲述过多路复用实现单服百万级别RPS吞吐,但在文中有一点是没有说的就是消息IO合并,如果缺少了消息IO合并即使怎样多路复用也很难达到百万级别的请求响毕竟所有应用层面的网络IO读写都是非常损耗性能的 ...

随机推荐

  1. (二叉树 递归) leetcode 889. Construct Binary Tree from Preorder and Postorder Traversal

    Return any binary tree that matches the given preorder and postorder traversals. Values in the trave ...

  2. git合并常见冲突

    如果一个文件在服务器上已经做了修改,然后在本地开发中又做了一些修改的时候,再发布这个文件时很容易造成代码冲突,错误如下, error: Your local changes to the follow ...

  3. Docker-CentOS7-安装

    yum install -y docker 可以看到,已经安装上docker了,并且没有报什么错误 启动docker,并查看运行状态 停止docker,并查看运行状态 启动完 docker后,可以查看 ...

  4. VMware 安装Linux系统 CentOS

    VMware 安装Linux系统 CentOS 1.  下载镜像系统 centos镜像下载地址:https://www.centos.org/download/ 选择DVD下载即可 linux各版本下 ...

  5. java 代码

    java 里的 pandas tablesaw DataFrame 再有就是 spark 了 java 代码规范 Java8特性详解 lambda表达式 Stream Sonar 规则检测 sprin ...

  6. 1. Nagios和 NagiosQL安装及配置

    目录 1. Nagios 和 NagiosQL简介 2. Nagios+NagiosQL搭建环境说明 3. Nagios.Nagios-plugins和NagiosQL的安装 4. 配置NagiosQ ...

  7. docker 基础知识分享ppt

    给团队做的docker基础分享ppt, 见下面的附件. https://files.cnblogs.com/files/harrychinese/docker_intro.pptx

  8. xls 打乱序列 -和给拼接字符串加上双引号

    打乱  给空列 添加函数 =RAND() ,下拉,排序,即可打乱 添加双引号: =""""&C1&"""" ...

  9. ddt源码修改:HtmlTestRunner报告依据接口名显示用例名字

    背景是这样的: 自己写了一套接口自动化的框架,其中使用unittest + ddt + excel作为数据驱动模式的应用,使用HtmlTetstRunner来生成测试用例. 一切看起来很完美. 但是, ...

  10. Burp插件开发——环境配置

    最近打算开发个Burp插件,从网上各种地找资料学习.第一步就应该是环境配置,请见下文. (其实最重要的前提是你已经安装了Burp,否则下面的所有内容都是无稽之谈了. https://pan.baidu ...