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.mzph.cn/web/8028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 正则表达式 re . 符号

Python 正则表达式 re . 符号 正文示例1示例2 正文 用法说明&#xff1a;(点号) 在默认模式下&#xff0c;匹配除换行符以外的任意字符。 如果指定了 flags 参数 DOTALL &#xff0c;它将匹配包括换行符在内的任意字符。 示例1 import restr1 abcde print(re.search(., str…

[SWPUCTF 2021 新生赛]PseudoProtocols、[SWPUCTF 2022 新生赛]ez_ez_php

[SWPUCTF 2021 新生赛]PseudoProtocols 打开环境&#xff0c;提示hint.php就在这里&#xff0c;且含有参数wllm 尝试利用PHP伪协议读取该文件 ?wllmphp://filter/convert.base64-encode/resourcehint.php//文件路径php://filter 读取源代码并进行base64编码输出。 有一些敏…

scikit-learn实现单因子线性回归模型

1.是什么&#xff1a; 针对机器学习提供了数据预处理&#xff0c;分类&#xff0c;回归等常见算法的框架 2.基于scikit-learn求解线性回归的问题&#xff1a; 2.1.求解a&#xff0c;b对新数据进行预测&#xff1a; 2.2评估模型表现&#xff08;y和y’的方差MSE&#xff09;…

Python轴承故障诊断 (18)基于CNN-TCN-Attention的创新诊断模型

往期精彩内容&#xff1a; Python-凯斯西储大学&#xff08;CWRU&#xff09;轴承数据解读与分类处理 Python轴承故障诊断 (一)短时傅里叶变换STFT Python轴承故障诊断 (二)连续小波变换CWT_pyts 小波变换 故障-CSDN博客 Python轴承故障诊断 (三)经验模态分解EMD_轴承诊断 …

【Linux系列】file命令

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

hadoop学习---基于Hive的数据仓库相关函数机制及其优化方案

Hive相关函数&#xff08;部分&#xff09;&#xff1a; if函数: 作用: 用于进行逻辑判断操作 语法: if(条件, true返回信息,false返回信息) 注意: if函数支持嵌套使用 select if(aa,’bbbb’,111) fromlxw_dual; bbbb select if(1<2,100,200) fromlxw_dual; 200nvl函数:…

25_Scala集合Tuple

文章目录 tuple1.元组定义2.Tuple元素访问3.如果元素的len2&#xff0c;称之为键值对对象&#xff0c;也称之为对偶元组4.补充上节Map5.Map集合遍历6.集合之间相互转化 tuple 概念&#xff1a;scala语言采用特殊的方式将无关的数据作为一个整体&#xff0c;组合在一起’ 1.元…

2024爆火的AI设备Rabbit R1到底是什么?有人说它是AI的iPhone时刻,有人说它是套壳的安卓

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

c++编程(10)——string

欢迎来到博主的专栏——c编程 博主ID&#xff1a;代码小豪 文章目录 <string>string类的接口构造、析构、与赋值重载构造函数赋值重载运算符 元素访问operator[] 容量修改器对string对象的操作迭代器 std::string是定义在c标准的一个类&#xff0c;定义在标准库<strin…

Unity 性能优化之图片优化(八)

提示&#xff1a;仅供参考&#xff0c;有误之处&#xff0c;麻烦大佬指出&#xff0c;不胜感激&#xff01; 文章目录 前言一、可以提前和美术商量的事1.避免内存浪费&#xff08;UI图片&#xff0c;不是贴图&#xff09;2.提升图片性能 二、图片优化1.图片Max Size修改&#x…

龙兵知识付费系统开发,教育机构如何利用小程序引流?

时代进步的好处是人们需求也越来越多&#xff0c;家长要求孩子学习十八般武艺&#xff0c;唱歌绘画舞蹈钢琴一样不能落下&#xff0c;各种培训需求只增不减&#xff0c;培训机构当然也越来越多。针对小孩子的才艺培训、针对大学生的考研考证培训、针对在职人士的技能培训和企业…

Momentum靶机系列Momentum2

先进行arp扫描&#xff1a; 获得渗透靶机的IP&#xff1a;192.168.13.142 扫描一下靶机的使用的端口&#xff1a; 具有tcp端口和http服务的80端口 可以扫描一下80端口的http服务&#xff1a; 可以发现一个网站&#xff1a;http://192.168.13.142 打开该网址&#xff1a; 查看…

Flink 部署模式

目录 概述 部署模式 会话模式&#xff08;Session Mode&#xff09; 单作业模式(Per-Job Mode) 应用模式(Application Mode) 运行模式&#xff08;资源管理模式&#xff09; Standalone运行模式 会话模式部署 应用模式部署 Yarn运行模式 会话模式部署 单作业模式部…

鸿蒙开发核心技术都有哪些【都是从零开始】

鸿蒙开发核心技术都有哪些&#xff1f;&#xff1a;【持续1年的时间公关鸿蒙技术】 我们能做哪些呢&#xff1f; 还是从UI业务开始吧 面试题1&#xff1a; 基于STAGE模型项目重构等问题 代理设计模式&#xff0c;业务与架构隔离 中介者模式&#xff0c;和代理设计模式的区别…

在 Vue3 中使用 styled-components

前言 随着组件化时代的兴起&#xff0c;前端应用开始采用组件级别的 CSS 封装&#xff1a;通过 JavaScript 声明和抽象样式&#xff0c;以提高组件的可维护性。在组件加载时动态加载样式&#xff0c;并动态生成类名&#xff0c;从而避免全局污染。 styled-components 是其中的…

湖仓一体 - Apache Arrow的那些事

湖仓一体 - Apache Arrow的那些事 Arrow是高性能列式内存格式标准。它的优势&#xff1a;高效计算&#xff1a;所有列存的通用优势&#xff0c;CPU缓存友好、SIMD向量化计算友好等&#xff1b;零序列化/反序列化&#xff1a;arrow的任何数据结构都是一段连续的内存&#xff0c;…

uniapp使用iconfont

1、把这两个文件在项目的静态资源目录下 2、修改iconfont.css文件 3、最后在app.vue中引入

软件测试—— 接口测试之通讯流程相关概念

通讯流程 1、协议 通讯规则 2、HTTP协议 协议的一种 3、接口规范文档 如何发请求的要求文档&#xff0c;获取什么响应内容的说明文档&#xff08;相当于菜单&#xff09;

Boost.Preprocessor库

Boost.Preprocessor库是Boost C库的一部分&#xff0c;提供了一组扩展的预处理器元编程功能。这个库的主要目的是帮助开发者使用预处理器进行元编程&#xff0c;以及提供一组工具来操纵预处理阶段的文本。 预处理器在C编译过程中的角色主要是处理源代码文件中的预处理指令&…

AI换脸免费软件Rope中文汉化蓝宝石版本全新UI界面,修复部分已知错误【附下载地址与详细使用教程】

rope蓝宝石版&#xff1a;点击下载 注意&#xff1a;此版本支持N卡、A卡、CPU&#xff0c;且建议使用中高端显卡&#xff0c;系统要求win10及以上。 Rope-蓝宝石 更新内容&#xff1a; 0214版更新&#xff1a; ①&#xff08;已修复&#xff09;恢复到以前的模型荷载参数。有…