服务器百万并发连接的实现

服务器的并发量
并发量:一个服务器能够承载客户端的数量,并且能够稳定的维护客户端。

承载:

客户端发一个请求,服务端能够在200ms内能够返回结果

1 数据库

2 网络带宽

3 内存操作

4日志

都是承载需要考虑的因素。

服务器能够同时建立的连接数量 就是服务器的并发量这种书法是错误的。连接数量只是服务器并发量的一个基础或者说是前提。

 测试:

测试环境:ubuntu16.04

sockfd->fd(五元组)

fd 是文件描述符和(sip dip spport dport proto)捆绑的到的结果

当我们用一个客户端程序模拟生成百万个fd去连接服务端时,发现只有两万多个fd连接服务端,

就是上面的open file 文件描述符收到限制了

可以手动进行修改 openfile的最大限制

方式1 ulimit -n这个命令来修改

方式2:vim /etc/security/limiys.conf 修改

 错误问题:

开启四台虚拟机进行模拟客户端连接,发现在客户端在连接到64999个连接后就自动退出了程序

conntion  timeout 

解析:

网卡接收一帧数据通过sk_buff传输给协议栈,协议栈处理后交给用户态

网卡将数据交给协议栈之前,要经过组件过滤netfilter 是对网络数据包的过滤。在netfilter过滤的基础上我们可以实现防火墙,在linux上有个工具叫做iptables,是一个网络数据过滤的一个表,他是基于netfilter做的,netfilter时过滤的一个标准。iptables分为两个部分,一部分是内核实现的netfilter的一些接口,另一部分是是应用程序可以用的东西,用户使用。

iptables -P port Drop 直接是网卡传给协议栈的数据之间过滤。

 客户端connect服务端的时候 在发生三次握手的时候客户端发送三次握手的请求没有发出去。

当客户端connect一定的数量的时候,客户端没法发出去三次握手的数据包。但是宰割限制是可以设置的。

设置方法:vim /etc/sysctl.conf

服务器代码地址:
xiaoyeyihao/xioayeyihao.github.io

中的reactor_singlecb_server.c

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值