epoll_C100K百万级连接
使用epoll假定有一百万个设备同时接入服务器
能够同时承载百万个设备连接(只讨论服务器端的连接),不断地建立连接模拟真实连接
问题一:(连接数量到1000多上不去)
ulimit -a 查看系统设置
//open files (-n) 1024 表示一个进程只允许创建1024个fd
//修改
ulimit -n 1048576 //2^20
问题二(段错误)
//存fd与对应数据的数组不够大,改大一点,能够多承载一些,说明数组大小有问题
//可以改成1048576
问题三(不能分配请求地址,模拟建立连接端错误,到63999个连接时)
第一种
一个socket ----> (fd + tcb)
tcb ---> (原目ip+原目port+协议)
port-> unsigned short 2个字节--->16bit max=65535
系统port:0-1024固定 所以原端口不足
解法一:原ip做多,多准备几个机器,更改client端
解法二:目的port做多(除了2048增加几个),更改sever端
第二种
sudo vim etc/sysctl.conf
可用端口范围有限制
增加一条 net.ipv4.ip_local_port_range = 1024 65535
问题四(开辟存数据的数组太大了) 1048576个加上buffer的大小大于2G 提示出错
struct 里面的wbuffer和rbuffer的值改小一点
修改 #define BUFFER_LENGTH 512 //(1024->512)
问题五(client模拟的连接不能增长了)
sudo vim etc/sysctl.conf
增加fs.file-max = 1048576
sudo sysctl -p //生效
问题六(server端直接down,退出了,约90万个连接)(代码能改的已经不多了)
tcp连接的内存问题,内存占满会有回收,或者直接杀死程序的风险
sudo vim etc/sysctl.conf
//有关内核空间的tcp协议栈的缓存
net.ipv4.tcp_mem 262144(1G)524288(2G)786432(3G)//对应的单位是页(页表)1-2G不优化2-3G优化回收,大于3G直接down表示内存超过多少要开始回收
net.ipv4.tcp_wmem 1024 1024 2048 //min 默认值 max
net.ipv4.tcp_rmem 1024 1024 2048
问题七(client端虚拟机的内存不够了)
分类:
Linux_c++ / 网络编程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!