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
- 彻底修改
sudo vim /etc/security/limits.conf
最后加
* hard nofile 1048576
* soft nofile 1048576 是2^20次
改完以后sudo reboot重启
- 用命令临时修改, 系统重启以后没了
uilmit -a 所有-a 可以看到openfiles -n (1024)
sudo ulimit -n 1048576 改大
3 request address问题分析与解决
connect: cannot assign requested address
是client还是server 的address用不了
**问题:**socketfd(文件描述符fd) 与网络地址ip什么关系
换言之
-
send怎么从sockfd里发到buffer到对端
sockfd–>可以找到五元组(远程ip, 远程port,本机ip, 本机port, proto协议)
-
recv怎么从buffer取到cliendfd里
正好反,从五元组反过来读出socketfd
答 是五元组被用完了
server:192.168.243.128:8888
client:对于client来说,五元组:远程ip, 远程port,本机ip, proto协议是tcp都确定,但是本机port被耗尽了
解法
- 把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是两个
- 文件系统没问题,防火墙 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
可能一个下午 问题等待时间长
并发连接没那么难,
-
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 -
报错:sysctl:cnannot stat /pro/sys/net/nf_conntrack_max:no such file or directory
sudo modprobe ip_conntracksudo 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万
因为企业里就是这个级别,单台千万级技术不同!!!
完结撒花 🌸, 两周左右扫一遍
相关文章:
LINUX 入门 9
LINUX 入门 9 day11 20240507 耗时:120min 课程链接地址 第9章 百万并发的服务器 1 百万并发项目介绍与并发概念讲解 书接上回,把server做成并发量百万级的服务量 装4台虚拟机 vmware右下角可以设置虚拟机内存 内核 没敲,就看了一下&a…...
汇编个位数求和实验
title: 汇编求和实验 keywords: 汇编 tags: [汇编] categories: 嵌入式 汇编求和实验 刚开始学习汇编 给大家做个参考 实验 5 子程序 5.1 实验目的 ①掌握利用堆栈传递参数的子程序调用方法。 ②过程调用伪指令:PROC,ENDP,NEAR和FAR。 ③8088…...
CGAL在ubuntu下的安装及Hello World的测试
ubuntu下的安装 CGAL安装 参考地址:https://doc.cgal.org/latest/Manual/usage.html 在ubuntu下安装: sudo apt-get install libcgal-dev 安装后的路径: 注意安装这个步骤安装后,boost,CGAL,gmp,mpfr头文件都在/usr/include目录下。 boost,gmp,mpfr库文件都在/…...
VIM命令常用
一、启动vim 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filename 打开vim并创建名为filename的文件 二、文件命令 打开单个文件vim file同时打开多个文件vim file1 …...
STM32单片机实战开发笔记-I2C通讯总线【wulianjishu666】
嵌入式单片机开发实战例程合集: 链接:https://pan.baidu.com/s/11av8rV45dtHO0EHf8e_Q0Q?pwd28ab 提取码:28ab I2C模块测试 功能描述 I2C总线接口连接微控制器和串行I2C总线。它提供多主机功能,控制所有I2C总线特定的时序&am…...
区块链 | NFT 水印:Review on Watermarking Techniques(一)
🍍原文:Review on Watermarking Techniques Aiming Authentication of Digital Image Artistic Works Minted as NFTs into Blockchains 1 应用于 NFT 的水印技术 常见的水印技术类型可以分为: 可见 v i s i b l e \mathsf{visible} visi…...
Python设计模式 - 单例模式
定义 单例模式是一种创建型设计模式, 其主要目的是确保一个类只有一个实例, 并提供一个全局访问点来访问该实例。 结构 应用场景 资源管理:当需要共享某个资源时,例如数据库连接、线程池、日志对象等,可以使用单例模…...
AI日报:干翻AI PC!苹果M4芯片首发;GoEnhance可生成粘土风格视频;DeepSeek-V2模型已在魔搭社区开源
欢迎来到【AI日报】栏目!这里是你每天探索人工智能世界的指南,每天我们为你呈现AI领域的热点内容,聚焦开发者,助你洞悉技术趋势、了解创新AI产品应用。 新鲜AI产品点击了解:AIbase - 智能匹配最适合您的AI产品和网站 1、干翻AI …...
cmake进阶:目标属性
一. 简介 前面学习了 cmake 的一些目录属性,本文来学习 cmake的一些 目标属性。 目标属性,顾名思义就是目标对应的属性。 二. cmake进阶:目标属性 目标属性,顾名思义就是目标对应的属性。 cmake的所有目标属性可以通过如下网址…...
uniapp0基础编写安卓原生插件和调用第三方jar包和编写语音播报插件之使用jar包插件
前言 如果你不会编写安卓插件,你可以先看看我之前零基础的文章(uniapp0基础编写安卓原生插件和调用第三方jar包和编写语音播报插件之零基础编写安卓插件), 我们使用第三方包,jar包编写安卓插件 开始 把依赖包,放到某个模块的/libs目录(myTestPlug/libs) 还要到build…...
恢复数据,电脑数据恢复详细操作指南(4个方法)
“我经常会把很多重要的文件都保存在电脑上,但今天在清理电脑时好像误删了一些数据,有没有比较好用的数据恢复方法可以分享一下呢?请大家给我推荐几个吧!” 随着电脑的普及,我们越来越多地将重要数据存储在电脑中。然而…...
make SGX_MODE=SW
make SGX_MODESW...
【毕业设计】基于微信小程序的校园快递平台系统设计与实现
1.项目介绍 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统校园快递平台系统信息管理难度大,容错率…...
SWAT模型【建模方法、实例应用、高级进阶技能】实践
第一部分:SWAT模型实践部分 一、SWAT模型及应用介绍 1.1 面源污染概要 1.2 SWAT模型及应用 1.3 SWAT模型原理 1.4 SWAT模型输入文件 1.5 ArcGIS与SWAT关系 二、SWAT模型中GIS必备技术 2.1 GIS软件平台 2.2 ArcGIS10.6安装和注意事项 2.3 ArcGIS入门 2.…...
远动通讯屏功能和作用
远动通讯屏功能和作用 首先大家要先了解,什么叫远动通讯?远动通讯是电力系统指用于远程通信和远程控制的设备。它主要采集电发场站的电气运行参数与远程调度监控中心进行数据交互,并接收调度中心远程的指令控制。提高电力系统的运行效率和可靠…...
Dashboard 安装部署
Dashboard 安装部署 Dashboard 安装部署 一:下载 二:部署步骤 1.镜像下载及导入 国内直接拉外网镜像会失败,可在境外下载镜像 查看 deployment 里的镜像版本 Dashboard Deploymentcontainers:- name: kubernetes-dashboardimage: k8s.g…...
idea Maven 插件 项目多环境打包配置
背景 不同环境的配置文件不一样,打包方式也有差异 1. 准备配置文件 这里 local 为本地开发环境 可改为 dev 名称自定义 test 为测试环境 prod 为生产环境 根据项目业务自行定义 application.yml 配置: spring:profiles:#对应pom中的配置active: spring.…...
密室逃脱游戏-第12届蓝桥杯省赛Python真题精选
[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第58讲。 密室逃脱游戏&…...
ES6-自学01
调用方法读取文件:如果失败就throw抛出err,成功则抛出data 2.使用promise封装,如果失败就改变状态为 reject(err) 如果成功就 resolve(返回成功的值) ,然后then,就可以获取返回的值,值toString()方法来把…...
PyQt5批量生成Checkbox及批量检查Checkbox的勾选状态
批量生成Checkbox并添加到TableWidget中 for i in range(10):checkbox_i QCheckBox(fCheckbox_{i}) # 生成Checkbox并命名为Checkbox_iself.ui_1.tableWidget_1.setCellWidget(i,1,checkbox_i) 批量检查勾选状态 # 批量生成Checkbox并存入列表 list_Checkbox_1 [] for …...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
