文档章节

千万并发连接实战

dongfuye
 dongfuye
发布于 2015/08/25 22:09
字数 1352
阅读 49
收藏 0
点赞 0
评论 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
海淀
PV与并发之间换算的算法换算公式

并发连接数 = PV / 统计时间 页面衍生连接次数 http响应时间 * 因数 / web服务器数量 PV = 并发连接数 统计时间 web服务器数量/ 页面衍生连接次数 / http响应时间 / 因数 解释: 统计时间 : ...

hb_fukua ⋅ 2012/02/22 ⋅ 0

[转]浅谈千万级PV/IP规模高性能高并发网站架构

[转]浅谈千万级PV/IP规模高性能高并发网站架构 Run - 学习练习复习2016-02-28161 阅读 架构IP并发 高并发访问的核心原则其实就一句话“把所有的用户访问请求都尽量往前推”。 如果把来访用户...

Run - 学习练习复习 ⋅ 2016/02/28 ⋅ 0

从TB级数据迁移,谈一谈自己的收获

项目背景 电商公司,核心服务重构,百亿级数据迁移,服务必须保证7*24小时不中断。 迁移方案 A、数据转换直接迁移到新库 B、按分库分表的shardId迁移 A方案在服务不中断的时候存在两个问题 ...

EveryDayNew ⋅ 2016/10/17 ⋅ 0

嵌入式开发培训学习多久?零基础嵌入式培训

嵌入式目前是IT行业发展热门行业之一,目前的人才市场对于嵌入式工程师的需求是非常多的。而且企业对嵌入式工程师的需求,达到全部需求量的60%~70%,嵌入式工程师的薪水相对较高。零基础嵌入...

长沙千锋 ⋅ 05/31 ⋅ 0

大规模并发推送服务设计

近期一个项目心里没底,大家给点意见 需求: 实现针对手机终端的信息推送功能。可以从后台推送任意字符串到手机终端。 应能根据终端类型、用户号码定向发送 支持终端量级为千万级 。 实现: ...

fengzh_1983 ⋅ 2013/03/06 ⋅ 38

C++11 网络库--handy

handy a HANDY network C++11 libray on linux. reactor 模式 支持优雅退出 无锁日志系统,按时间间隔轮替 代码简短 参考muduo的实现,采用C++11简化代码 ubuntu14 64位/g++ 4.8.1上通过测试...

dongfuye ⋅ 2014/08/06 ⋅ 0

揭秘:微信如何用 libco 支撑8亿用户

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

王练 ⋅ 2016/10/30 ⋅ 11

【Oracle】-【索引】先查数据再建索引,还是先建索引再插数据?

问题: 1、新建一个表结构,创建索引,将百万或千万级的数据使用insert导入该表。 2、新建一个表结构,将百万或千万级的数据使用isnert导入该表,再创建索引。 这两种效率哪个高呢?或者说用...

bisal ⋅ 2013/06/27 ⋅ 0

关于并发、超卖处理的思路

做电商网站,经常会有各种秒杀和热门商品,所以高并发的处理一直是电商最重要的事情。这里记录下当初自己是如何处理的 写在前面: 1、本文设计到的并发处理均是针对纵向,不针对横向扩展,即...

卖小女孩的小火柴 ⋅ 2015/10/13 ⋅ 6

千万级别并发用户模拟软件--tcpburn

tcpburn是由网易自主研发的能够模拟千万级别并发用户的一个软件,目的是能够用较少的资源来模拟出大量并发用户,并且能够更加真实地进行压力测试, 以解决网络消息推送服务方面的压力测试的问...

wangbin5790 ⋅ 2013/11/05 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Cloud构建微服务架构—创建“服务注册中心”

创建一个基础的Spring Boot工程,命名为eureka-server,并在pom.xml中引入需要的依赖内容: <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-par......

itcloud ⋅ 16分钟前 ⋅ 0

拖动

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>event</title> <style> #box { width: 100px; height: 100px; background-color: aquamarine; position: absolute; } </style......

fyliujj ⋅ 18分钟前 ⋅ 0

es6 polyfill array

polyfill之javascript函数的兼容写法——Array篇 1. Array.isArray(obj) if (!Array.isArray) { Array.isArray = function(arg) { return Object.prototype.toString.call(arg) === '[objec......

球球 ⋅ 20分钟前 ⋅ 0

kibana启动异常

检查一下:kibana.yml 每一对key:value中,冒号之后应有空格。

增删改查1 ⋅ 22分钟前 ⋅ 0

js修改img的src属性刷新图片时的图片缓存问题

问题:上传一张图片,通过js更新src属性刷新图片使其即时显示时, 当img的src当前的url与上次地址无变化时(只更改图片,名称不变,不同图片名称相同)图片不变化(仍显示原来的图片) 但通过...

HaierBrother ⋅ 22分钟前 ⋅ 0

Mysql

1.Jdbc Url 设置allowMultiQueries为true和false mysql的批量更新是要我们主动去设置的, 就是在数据库的连接url上设置一下,加上* &allowMultiQueries=true *即可。 参数名称 参数说明 缺省...

瑟青豆 ⋅ 25分钟前 ⋅ 0

mysql导出导入表结构与数据

当我们需要进行数据迁移时,mysql自带的mysqldump会是最好的方式。 1.导出某张表的结构和数据 首先,我们应当使用服务器,打开终端,连接到所需要导出的表所在的服务器上。执行命令: mysqld...

hengbao5 ⋅ 26分钟前 ⋅ 0

世界杯也走向“比拼”大数据的时代

《日本经济新闻》6月19日报道称,俄罗斯足球世界杯已于6月14日揭开战幕。作为第21次举办的足球世界杯,如何活用大数据有可能成为决定各支球队胜负的重要因素。从对阵球队的分析到战术建议,还...

加米谷大数据 ⋅ 26分钟前 ⋅ 0

金额转为千分制,金额转中文大写

金额转关为大写 /** 数字金额大写转换(可以处理整数,小数,负数) */ function digitUppercase(n){ if(!n) reutrn "" let fraction = ['角', '分']; let digit = [...

YXMBetter ⋅ 29分钟前 ⋅ 0

开发利器JRebel部署SpringBoot项目

不要以为年纪轻轻就跌倒了人生谷底,未来还有更大的下降空间等着你。 idea下载和安装JRebel 激活JRebel 访问https://my.jrebel.com/ 使用facebook或twitter登录 勾选 Build project automati...

郑龙飞 ⋅ 35分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部