文档章节

千万并发连接实战

dongfuye
 dongfuye
发布于 2015/08/25 22:09
字数 1352
阅读 128
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

c10k,c100k,c1000k等问题大家都已经司空见惯,那么10m(千万)并发连接呢?今天就来一起挑战一下。 ##准备机器 10m连接,大家的个人电脑肯定无法满足要求,如果不是在大公司任职,弄个实际的物理机对大家是个奢望。那么怎么办?我也面临同样问题。 现在的云计算这么发达,还可以按小时计费,一小时的费用也就几元,那就试试云计算产品吧。小编先是在阿里云上测试,但阿里云的按需付费主机配置不高,费了不少时间,最终只跑到了3m个连接。阿里云的不行,是主机的配置问题还是程序的问题呢?为了得到最终的结论,我尝试了其他的云产品,最终ucloud的云主机给了我兴奋的答案。

首先创建ucloud主机 ucloud主机(一共需要两台,一台作为服务器,一台作为客户端): . 选择主机管理的创建主机 . 系统选择ubuntu14.4 64bit (小编的测试程序是c++11,需要高版本的g++) . 机型标准版 . 网络增强一定要选择开启 (千万连接是网络IO密集型,网络当然要强大型) . cpu 16核 内存64G 数据盘0 . 下一步中的网络类型选择基础网络即可,创建主机之后,需要购买弹性ip,并且绑定到主机 . 价格:小编实验时,上述的配置,一台仅需7.2元一小时,两台不到15元

做实验的时候,大家记得要眼疾手快哦,一小时十几元,获得了自己想要的结果就赶紧释放主机哈 ##调整参数 10m并发连接对系统是个挑战,需要调整相关的参数

sysctl -w fs.file-max=10485760 #系统允许的文件描述符数量10m
sysctl -w net.ipv4.tcp_rmem=1024 #每个tcp连接的读取缓冲区1k,一个连接1k,10m只需要10G
sysctl -w net.ipv4.tcp_wmem=1024 #每个tcp连接的写入缓冲区1k
echo '* soft nofile 1048576' >> /etc/security/limits.conf #用户单进程的最大文件数,用户登录时生效
ulimit -n 1048576 #用户单进程的最大文件数 当前会话生效

##部署测试程序 下面可以开始部署我们的测试程序了

apt-get update
apt-get install -y screen git make g++ nload iptraf

git clone https://github.com/yedf/handy
cd handy
make -j4
cd examples

##运行测试程序 选取一台主机S作为服务器,运行命令 python 1kw-svr.py 1000 1000 10 该脚本会以job方式启动十个进程,每个进程监听100个端口,一共监听了1000-2000的1000个端口,每个服务器简单的echo收到的数据 选取另一台主机C作为客户端,在screen里运行命令(需要填写S的内网ip) python 1kw-cli.py ip-S 1000 2000 10000000 1000 300 该脚本会以job启动1000个进程,每个进程会产生1w(10000000/1000)个连接,连接S的1000-2000端口。最后的300表示每300秒往服务器发送一个数据包 每个进程都会几秒输出一条信息,1000个进程会造成刷屏,表面刷屏数据导致的外网网络流量可能影响ssh,一般观察一小段时间后,小编就detach screen了 10m连接的创建需要花费不少时间的,如果疯狂的创建连接,导致的结果是很多连接都不成功,于是脚本每启动一个进程,睡眠0.5s,让连接的创建速度保持在2w/s,因此大约需要10分钟的时间才能把所有连接都创建成功。

然后,10m连接的建立就不需要更多的步骤啦,使用命令 watch ss -s 我们就可以开始观察连接的创建进度啦,看着连接渐渐的往上走,超过10w,100w是不是很有成就感。

##更多内容

还可以通过iptraf,nload等工具来查看系统的网络情况

系统在上面千万连接运行中,并没有多少的负载,当然啦,一部分负载跑到底层的hypervisor去了

小编实验的机器上内存占用大约40G,平均一个连接前后一共用了4k,不多不多

网络发包数量是3w/s,收包数量是6w/s,这是为什么呢?熟悉tcp协议的同学可能已经知道了,C发送数据,S回应数据并带了ACK,C需要对S发送的数据ACK

大家还可以跑两个发送大量数据的程序,例如 ./1kw-cli ip-S 1000 2000 10000 0 1024 这个程序会打开10000个连接,不断的与S进行数据收发,数据大小为1024Byte 小编这里启动了两个这样的程序,网卡流量立刻就超过了500MBit/s

写到这里,顺便给出我测是的ucloud主机的性能参数吧: 网卡流量最多可以到1.2GBit/s,并非所有时间都到了这么高,并不稳定,一般在800M-1.2G之间波动 tcp收包发包的最高qps是12w/s,多了就上不去了

dongfuye

dongfuye

粉丝 1
博文 2
码字总数 2486
作品 2
海淀
私信 提问
加载中
请先登录后再评论。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
用vertx实现高吞吐量的站点计数器

工具:vertx,redis,mongodb,log4j 源代码地址:https://github.com/jianglibo/visitrank 先看架构图: 如果你不熟悉vertx,请先google一下。我这里将vertx当作一个容器,上面所有的圆圈要...

jianglibo
2014/04/03
4.1K
3
WSGI Web服务器--UV-Web

uv-web是一个轻量级的支持高并发的WSGI Web服务器,基于libuv构建,部分代码源于开源项目bjoern,本质是python的C扩展,所以适用于部署绝大部分 python web应用(如 Django) 特性 兼容 HTTP 1...

Jone.x
2013/03/04
1.7K
0
django-c10k-demo

这是一个演示程序,用来实现同时 10000 个并发连接到 Django 。涉及的概念包括:the C10k problem, the WebSocket protocol, the Django web framework, and Python's upcoming asynchronou......

匿名
2013/03/27
1.7K
0
高性能异步网络服务框架--libgod

libGod是一个全异步+协程机制实现的网络库,适用于windows、linux、bsd等多种平台。内部使用IOCP、epoll、kqueue等系统调用管理事件机制,同时巧妙的利用协程,将复杂的异步逻辑转换为同步,...

libGod
2012/11/09
6.7K
6

没有更多内容

加载失败,请刷新页面

加载更多

数据库高频面试点,事务/乐观锁/悲观锁/CAS/MySQL存储引擎

事务的ACID特性是什么? 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用; 一致性: 执行事务前后,数据保持一致,多个事务对同一个数据读...

osc_45536bvu
45分钟前
16
0
大数据BI软件助力企业数字化转型

当下,「新基建」势头正盛,随着“新基建”成为热议话题,数字化也随之成为企业面临的新机遇和新挑战。新基建的核心就是数据,数据是数字经济和企业数字化转型的生产要素和发展动力。 再看看...

osc_0boqdoe2
46分钟前
0
0
凯旋创投来志刚:基因治疗新时代,大戏刚刚开始

  2017 年,全球第一个基因治疗方法 CAR-T 细胞药物 Kymriah 获得 FDA 上市批准,从此掀起了基因治疗的热潮。随着相关技术和政策的不断成熟,基因治疗市场也随之扩大。根据德勤发布的《引领...

osc_k3vwonkw
47分钟前
10
0
LightningChart.NET使用两个BarSeries创建简单的2D图表

本教程介绍了如何使用两个BarSeries创建简单的2D图表。 BarSeries将数据值表示为矩形条,并且可以用于以非常清晰的方式可视化数据之间的差异和方差。 在本教程中,BarSeries用于表示两年期间...

roffey
48分钟前
0
0
Mybatis trim 标签的 2 个妙用!

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! mybatis的trim标签一般用于去除sql语句中多余的and关键字,逗号,或者给sql语句前拼...

osc_x03qsedc
48分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部