Linux C/C++ 学习笔记(九):百万并发的服务器实现

news2025/7/19 6:23:19

本文内容参考自(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,开多个进程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/37906.html

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

相关文章

selenium--关闭窗口,指定窗口大小,前进,后退,刷新等等

关闭窗口跳转到指定页面窗口大小设置返回上个页面前进到下一个页面页面刷新关闭窗口 在selenium中执行完关闭窗口一般有两种方法: driver.close() driver.quit()这两个都是常用的方法,但是他们有什么区别呢? 对于driver.close(),他是关闭当…

【FME实战教程】003:FME读取地理空间数据(矢量、栅格、点云、三维模型、数据库、地理服务)大全

FME读取地理空间数据(矢量、栅格、点云、三维模型、空间数据库、地理服务)大全。 文章目录1. FME读取数据1.1 读取矢量1.1.1 读取Shapefile1.1.2 读取dwg1.2 读取栅格数据1.2.1 影像DOM1.3 读取地理数据库1.3.1 读取文件数据库(.gdb&#xff…

机械原理复习试题

​ 编辑切换为居中 添加图片注释,不超过 140 字(可选) ​ 编辑切换为居中 添加图片注释,不超过 140 字(可选) ​ 编辑 添加图片注释,不超过 140 字(可选) ​ 编辑…

聚类分析的基本概念和方法

聚类分析的基本概念和方法 文章目录聚类分析的基本概念和方法前言一、什么是聚类分析1、聚类分析基本流程与步骤2、 什么是好的聚类方法3、聚类的模型评估4、聚类分析的比较5、聚类分析的挑战二、基本聚类方法概述三、划分算法1、基本概念2、k-means 聚类方法1、k-means 方法的…

CMake中configure_file的使用

CMake中的configure_file命令用于将一个文件拷贝到另一个位置并修改其内容&#xff0c;其格式如下&#xff1a; configure_file(<input> <output>[NO_SOURCE_PERMISSIONS | USE_SOURCE_PERMISSIONS |FILE_PERMISSIONS <permissions>...][COPYONLY] [ESCAPE_…

01 一条SQL 语句是如何执行的?

select * from teacher where id 10 1、一条简单的sql语句底层的执行过程是怎么样的&#xff1f; 答&#xff1a;一条sql执行会经过连接器、查询缓存、分析器、优化器和执行器等步骤。 2、连接器的作用是什么&#xff1f; 答&#xff1a;sql查询&#xff0c;首先连接到这个数…

【机器学习项目实战10例】(四):利用XGBoost实现短期电力负荷预测

💥 项目专栏:【机器学习项目实战10例】 文章目录 一、利用XGBoost实现短期电力负荷预测二、数据集介绍三、将数据进行标准化四、形成训练数据五、划分训练集、测试集六、定义模型七、模型训练八、训练集、测试集验证九、网络搜索十、绘制结果一、利用XGBoost实现短期电力负荷…

分布式事务

一、事务 1.1、什么是事务&#xff1f; 事务&#xff08;transaction&#xff09;是访问并操作数据库中数据的一个程序执行单元&#xff0c;由开始事务和提交事务之间的所有的语句组成。事务的结束有两种&#xff0c;一个是事务中间的所有操作执行成功&#xff0c;提交事务。一…

UE5笔记【九】蓝图BluePrint;

新建一个第三视角游戏。然后打开关卡蓝图。 长得跟材料编辑器一样。 这里是我们创建Node和新功能的地方。 首先我们新建一个游戏开始的地方。右键&#xff1a;Begin搜索。 我们需要打印一行字&#xff1a;欢迎来到游戏世界。我们需要添加一个打印文本的结点&#xff1a;PrintT…

APS自动排产 — 排产结果拉动物料需求计划

一、APS系统生产计划前应该注意哪些 建立好基础资料 标准产能&#xff1a;所有产品的标准产能&#xff0c;来自于工程技术部。如果工程技术部无法提供标准产能&#xff0c;则请生产部门根据实际提供相对准确的标准产能。技术资料&#xff1a;产品的物料清单(BOM)、图纸、工程…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java线上学习系统8e88w

做毕业设计一定要选好题目。毕设想简单&#xff0c;其实很简单。这里给几点建议&#xff1a; 1&#xff1a;首先&#xff0c;学会收集整理&#xff0c;年年专业都一样&#xff0c;岁岁毕业人不同。很多人在做毕业设计的时候&#xff0c;都犯了一个错误&#xff0c;那就是不借鉴…

ArcGIS中ArcMap图层属性表的中文字段乱码的解决方法

本文介绍ArcMap软件打开图层的属性表后&#xff0c;出现字段中汉字乱码情况的解决方法。 有时在使用ArcMap软件时&#xff0c;会发现一些图层的属性表中&#xff0c;原本应该是中文的字段却出现乱码的情况&#xff1b;如下图所示&#xff0c;其中NAME99一栏应该是图层中各个要素…

50-51 - C++对象模型分析

---- 整理自狄泰软件唐佐林老师课程 1. 回归本质 1.1 class是一种特殊的struct 在内存中class依旧可以看作 变量的集合class与struct遵循相同的 内存对齐 规则class中的成员函数与成员变量是 分开存放 的 每个对象有独立的成员变量所有对象共享类中的成员函数 1.2 值得思考…

OpenGL ES 学习(四) -- 正交投影

这里的内容基本参考于 https://www.jianshu.com/p/51a405bc52ed &#xff0c;因为写得很好&#xff0c;也没啥补充的&#xff0c;就当做记录一下。 这里先简单解决变形的问题&#xff0c;关于 OpenGL 更多图形矩阵变换&#xff0c;等后面再详细讲。 一. 归一化设备坐标 在Ope…

forplo | 冲冲冲!这个画森林图的包好flexible哦~

1写在前面 我想大家肯定都用过森林图&#xff0c;应用比较多的场景可能是展示meta分析&#xff0c;回归分析结果的时候。&#x1f973; 画森林图的包还是挺多的&#xff0c;今天介绍一下forplo包的用法。&#x1f618; 2用到的包 rm(list ls())library(tidyverse)library(forp…

(第九十三篇)C规范编辑笔记(五)

往期文章&#xff1a; C规范编辑笔记(一) C规范编辑笔记(二) C规范编辑笔记(三) C规范编辑笔记(四) 正文&#xff1a; 继第四篇C规范编辑笔记之后&#xff0c;我们今天来分享第五篇C规范编辑笔记&#xff0c;讲解部分类型初始化时候的建议&#xff0c;话不多说&#xff0c;我…

wodP2P ActiveX 最新版 Crack

wodP2P ActiveX 组件 网络P2P ActiveX 客户端 OCX/DLL&#xff0c;V-P-N 组件&#xff0c;P2P 组件&#xff0c;P2P 库 wodP2P 是 P2P 点对点 ActiveX 组件&#xff0c;用于在两个对等点之间建立虚拟专用网络。所有 P2P 通信都经过加密和保护。对等点能够转发本地和远程端口、发…

Ubuntu 20.04系统中Sage(sagemath)安装及使用详细过程

文章目录一、安装方式一&#xff1a;预编译二进制版本二、安装方式二&#xff1a;源码编译最近在做实验遇到要安装Sage&#xff0c;也是花了将近三天时间才弄好&#xff0c;一波三折整理了一下&#xff0c;以便后续还要安装时能少走弯路。首先&#xff0c;了解一下sage是什么。…

fiddler抓包

首先安装fiddler官网地址 安装完毕之后&#xff0c;这时fiddler软件是抓取不了https的请求数据包的 fiddler 抓取https请求数据包 打开fiddler 一次点击 工具 -> 选项 -> HTTPS 勾选上面选中 的选项 依次进行以下步骤即可 解压fiddler包&#xff0c; 安装fidder 打开…

Servlet到底是什么(非常透彻)

Servlet到底是什么&#xff1f;1. Servlet的概念2. Servlet是一种规范3. Servlet的接口4. JSP是什么学习顺序1. Servlet的概念 Servlet 是 Server Applet 的缩写&#xff0c;译为“服务器端小程序”&#xff0c;是一种使用 Java 语言来开发动态网站的技术。 Servlet 虽然被称…