当前位置: 首页 > news >正文

LINUX 入门 9

LINUX 入门 9

day11 20240507 耗时:120min

课程链接地址

第9章 百万并发的服务器

1 百万并发项目介绍与并发概念讲解

书接上回,把server做成并发量百万级的服务量

装4台虚拟机 vmware右下角可以设置虚拟机内存 内核

没敲,就看了一下,我的天,老师也没让敲multi_port.c的代码,直接用

gcc -o tcp_server tcp_server.c
./tcp_server 8888 开起来servergcc -o multi mult.c./multi 192.168.243.128 8888

2 connection refused问题解决

服务器爆了

fd file descriptor 文件描述符 文件系统默认每个进程的fd只有1024

  1. 彻底修改
sudo vim /etc/security/limits.conf
最后加
*	hard	nofile 1048576
*	soft	nofile 1048576 是2^20次

改完以后sudo reboot重启

  1. 用命令临时修改, 系统重启以后没了
uilmit -a 所有-a 可以看到openfiles -n (1024)
sudo ulimit -n 1048576 改大

3 request address问题分析与解决

connect: cannot assign requested address

是client还是server 的address用不了

**问题:**socketfd(文件描述符fd) 与网络地址ip什么关系

换言之

  1. send怎么从sockfd里发到buffer到对端

    sockfd–>可以找到五元组(远程ip, 远程port,本机ip, 本机port, proto协议)

  2. recv怎么从buffer取到cliendfd里

    正好反,从五元组反过来读出socketfd

是五元组被用完了

server:192.168.243.128:8888

client:对于client来说,五元组:远程ip, 远程port,本机ip, proto协议是tcp都确定,但是本机port被耗尽了

解法

  1. 把client的远程port多开几个,现在只开了8888

4 request address解决方案的实现

端口只有65535个, 为什么socketfd可以到百万

希望可以多个端口 远程port

改tcp_server.c里开8888 -8987 100个

int islistenfd(int fd, int *fds) {int i = 0;for (i = 0;i < MAX_PORT;i ++) {if (fd == *(fds+i)) return fd;}return 0;
}main里int port = atoi(argv[1]); // start int sockfds[MAX_PORT] = {0}; // listen fdint epfd = epoll_create(1);  int i = 0;for (i = 0;i < MAX_PORT;i ++) {int sockfd = socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in addr;memset(&addr, 0, sizeof(struct sockaddr_in));addr.sin_family = AF_INET;addr.sin_port = htons(port+i); // 8888 8889 8890 8891 .... 8987addr.sin_addr.s_addr = INADDR_ANY; if (bind(sockfd, (struct sockaddr*)&addr, sizeof(struct sockaddr_in)) < 0) {perror("bind");return 2;}if (listen(sockfd, 5) < 0) {perror("listen");return 3;}printf("tcp server listen on port : %d\n", port + i);struct epoll_event ev;ev.events = EPOLLIN; ev.data.fd = sockfd;epoll_ctl(epfd, EPOLL_CTL_ADD, sockfd, &ev);sockfds[i] = sockfd;}// 

先listen监听100个port,然后放到epoll里管理所有IO

client和server都编译后
server端
./tcp_server 8888 速度变快了client端./multi 192.168.243.128 8888

htop可以看内存和cpu使用 装一下

5 nf_conntrack_max的分析

client 64999 server 65535

文件描述符fd个数与最大个数fs.file_max = 1048576是两个

  1. 文件系统没问题,防火墙 nf(net filler) 的问题??

nf_conntrack_max

cat /proc/sys/net/netfiller/nf_conntrack_max
是655536vim /etc/sysctl.conf
fs.-max =1048576
net.nf_conntrack_max= 1048576设置以后生效 看数能到65536吗
sudo sysctl -p

可能一个下午 问题等待时间长

并发连接没那么难,

  1. server报错: too many open files in system

    filemax不够大

    sudo syctl -pcat /pro/sys/fs/file-maxvim /etc/sysctl.conf
    fs.-max =1048576
    net.nf_conntrack_max= 1048576
    
  2. 报错:sysctl:cnannot stat /pro/sys/net/nf_conntrack_max:no such file or directory

    sudo modprobe ip_conntrack
    

    sudo sysctl -p是一个Linux命令,用于加载并应用sysctl.conf文件中的内核参数配置。当修改了sysctl.conf文件后,需要使用该命令来使更改生效。

6 tcp wmem与rmem的调参与实现

clientfd可以到80万左右,4G内存跑满

问题:内存回收

断开时2核CPU瞬间全红,大量client瞬间down了,尽量避免,难以存client的状态

引入tcp协议栈

sudo vim /etc/sysctl.confnet.ipv4.tcmp_mem = 252144 524288 786432  单位是page, 一页是4k 对应1G2G3G
net.ipv4.tcmp_wmem = 1024 1024 2048  发送socket的send buffer 最小1k,中间默认1k 最大2k
net.ipv4.tcmp_rmem = 1024 1024 2048  接受buffer生效
sudo vim /etc/sysctl.conf

就能做到100万

用xshell

问题:为什么是100万,不是10万

因为企业里就是这个级别,单台千万级技术不同!!!

完结撒花 🌸, 两周左右扫一遍

http://www.lryc.cn/news/343348.html

相关文章:

  • 汇编个位数求和实验
  • CGAL在ubuntu下的安装及Hello World的测试
  • VIM命令常用
  • STM32单片机实战开发笔记-I2C通讯总线【wulianjishu666】
  • 区块链 | NFT 水印:Review on Watermarking Techniques(一)
  • Python设计模式 - 单例模式
  • AI日报:干翻AI PC!苹果M4芯片首发;GoEnhance可生成粘土风格视频;DeepSeek-V2模型已在魔搭社区开源
  • cmake进阶:目标属性
  • uniapp0基础编写安卓原生插件和调用第三方jar包和编写语音播报插件之使用jar包插件
  • 恢复数据,电脑数据恢复详细操作指南(4个方法)
  • make SGX_MODE=SW
  • 【毕业设计】基于微信小程序的校园快递平台系统设计与实现
  • SWAT模型【建模方法、实例应用、高级进阶技能】实践
  • 远动通讯屏功能和作用
  • Dashboard 安装部署
  • idea Maven 插件 项目多环境打包配置
  • 密室逃脱游戏-第12届蓝桥杯省赛Python真题精选
  • ES6-自学01
  • PyQt5批量生成Checkbox及批量检查Checkbox的勾选状态
  • 如何获得一个Oracle 23ai数据库(Virtual Appliance)
  • 跟TED演讲学英文:What moral decisions should driverless cars make by Iyad Rahwan
  • 【ITK配准】第七期 尺度(Metric)-规格化交互信息Metric
  • Python练习 20240508一次小测验
  • 桥梁施工污水需要哪些工艺设备
  • ADOP带你了解:长距离 PoE 交换机
  • 想要品质飞跃?找六西格玛培训公司就对了!
  • 【工具】Office/WPS 插件|AI 赋能自动化生成 PPT 插件测评 —— 必优科技 ChatPPT
  • 4000定制网站,因为没有案例,客户走了
  • 内容安全(AV)
  • 互联网产品为什么要搭建会员体系?