Linux C/C++ 学习笔记(九):百万并发的服务器实现
创始人
2024-02-17 09:54:16
0

本文内容参考自(2条消息) Linux C/C++ 开发(学习笔记十三):百万并发的服务器实现_菊头蝙蝠的博客-CSDN博客_linux百万并发

一、connection_refuesed ---->文件系统最大的进程fd个数

nat 模式,物理机的VMnet8网卡,连接到了VMnet8虚拟交换机,在本机使用网络调试助手要使用此ip,其他ip连不上。

linux 文件系统默认的文件描述符的数量是1024个,可以通过ulimit -a命令查看

可通过ulimit -n命令进行修改,这种修改方式是临时修改,系统重启后又恢复原状

可通过修改文件永久修改系统默认的文件描述符数量

在这里插入图片描述

 在那个文件下添加两行

在这里插入图片描述

 reboot后即可

二、Cannot assign requested address-----> 在服务器开多个端口

问题及原因

在客户端这边,远程ip,远程端口,协议都是确定的,本机ip也是确定的,那么实际上就是本机的端口耗尽了。

解决方法就是 在服务器开多个端口。

解决问题

通过一个循环,开MAX_PORT个端口,每个为一个sockfd
并把每个sockfd加入到epoll中去
最后还需要用一个数组,将每次遇到的sockfd存入到数组后。(由于后续在监听到数据后,需要区分是listenfd还是客户端的信息)

后续while(1) 持续监听的时候,通过sockfds数组(理解为sockfd的集合)判断是listenfd还是clientfd就行了。

通过将MAX_PORT个io都放入到epoll中去管理

三、Connection time out----->设置当前系统设置最大连接数和防火墙对外的最大连接数

 运行到后来,客户端还是会出现问题

 可以看到64999非常接近65535这个数

排查问题

通过命令来查看 系统所有进程一共可以打开的文件数量 

 

结果很大,因此和最大可打开的文件数量没有关系

查看当前系统设置最大连接数

 这是 内核里面设置的防火墙对外的最大连接数

在这里插入图片描述

 因此需要设置参数,linux内核中的参数,都可以通过sysctl.conf来设置

在这里插入图片描述

 修改后,通过下面这条命令进行生效

 在这里插入图片描述

四、服务器 too many open files in system ----> 设置file_max

然后发现,服务器端,出现了问题,too many open files in system 

在这里插入图片描述发现服务器的file-max不够大

 在这里插入图片描述

 对服务器端的/etc/sysctl.conf 同样进行修改

 在这里插入图片描述

通过sudo sysctl -p去更新

如果出现问题

在这里插入图片描述

 需要 运行下列命令。

 在这里插入图片描述

Linux modprobe命令用于自动处理可载入模块。modprobe可载入指定的个别模块,或是载入一组相依的模块。

 然后再sudo sysctl -p去更新

五、内存不够----->调整TCP/IP协议栈 参数

在跑的时候查看htop,发现当一段时间后,fd个数不再增加了

在这里插入图片描述

服务器停住了,因为内存满了,但是过一会又开始下降,说明是内存开始回收。
一旦开始对客户端大量进程结束,cpu的利用率会到达100%(而一般不能这么做,一般不能超过80%)

这时候就要调整 TCP/IP协议栈了。

在这里插入图片描述

在这里插入图片描述

 net.ipv4.tcp_mem, tcp全局缓存大小,单位是页(4k)从左到右分别是 1G   2G   3G

  2G之前系统不会有什么行动,2~3G系统会进行内存优化(比如对没用的TCP连接进行回收),3G以上禁止分配

net.ipv4.tcp_wmem对应tcp套接字的发送缓冲区,单位是B,从左到右分别是最小值、默认值(创建套接字时分配的大小)和最大值

net.ipv4.tcp_rmem对应tcp套接字的接收缓冲区,单位是B,从左到右分别是最小值、默认值(创建套接字时分配的大小)和最大值 

sockfd-->2k

1024字节2*100w差不多为2G。(通过这种方式计算出来)

总的缓存=(每个fd发送缓存+每个fd接受缓存)*fd数量

如果想做到千万并发,就要用到用户态协议栈了

如果想提升客户端连接速度,可以将100个listenfd放入100个线程中去
把clientfd和listenfd放到不同的线程中

如果只利用一个端口8888,开多个进程

相关内容

热门资讯

央行发布一次性信用修复政策 新京报讯 12月22日,中国人民银行发布关于实施一次性信用修复政策有关安排的通知。 中国人民银行上海...
爱看头评 | “体重立法”引热... 经浙江省人大常委会批准,《杭州市全民健康促进条例》(以下简称“《条例》”)将于明年1月1日起正式施行...
美日央行政策分化 国内方面,11月经济数据呈现“生产端稳中修复、需求端分化加剧”格局。工业生产方面,规模以上工业增加值...
一次性信用修复政策来了 央视新闻 今天(22日),中国人民银行发布通知,实施一次性信用修复政策,支持信用受损但积极还款的个人...
陕西:公检法联合集中打击拒执犯... 本报讯 (记者 刘辉 通讯员 赵玲)“依法打击拒不执行判决、裁定犯罪,是解决执行难问题的一项有力措施...
卓然股份被证监会立案调查,律师... 雷达财经雷助吧出品 文|周慧 编|深海 12月19日,卓然股份发布了《关于公司及实际控制人收到立案告...
公牛集团回应宣传语争议:起诉家... 日前,公牛集团就“10户中国家庭,7户用公牛”宣传语引发的争议作出回应。近日,广东中山市家的电器有限...
一次性信用修复政策来了!细则详... 今天(22日),中国人民银行发布通知,实施一次性信用修复政策,支持信用受损但积极还款的个人高效便捷重...
《中国人民银行关于实施一次性信... 1.符合哪些条件的逾期信息可以适用一次性信用修复政策,作不予展示处理? 一次性信用修复政策主要有四个...