【零声教育】准备4台虚拟机,我们一起来实现服务器百万级并发丨服务器代码: epoll + 线程池的优缺点丨系统fd连接数量修改
视频资料代码领取裙:832218493
免费学习地址:C/C++Linux服务器开发/后台架构师
服务器的并发量
并发量:一个服务器能够承载客户端的数量,并且能够稳定的维护客户端。
承载:
客户端发一个请求,服务端能够在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