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

简介: Linux C/C++ 开发(学习笔记十三):百万并发的服务器实现

准备内容

一、connection_refuesed ---->文件系统最大的进程fd个数

在那个文件下添加两行

reboot后即可

可以通过ulimit -a指令来查看文件系统最大的进程fd个数

确实由1024变为了百万级别

二、Cannot assign requested address-----> 在服务器开多个端口

连接到一半的时候又会遇到这个问题

在客户端这边,远程ip,远程端口,协议都是确定的,本机ip也是确定的,那么实际上就是本机的端口耗尽了。

解决方法就是 在服务器开多个端口,目前就开了一个端口:8888

解决过程

端口只有65535个,如何可以实现几百万并发呢。由于sockfd是五元组,而几百万并发是sockfd的数量

通过一个循环,开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去更新

如果出现问题

需要 运行下列命令

然后再sudo sysctl -p去更新

五、内存不够----->调整TCP/IP协议栈 参数

在跑的时候查看htop,发现当一段时间后,fd个数不再增加了,

服务器停住了,因为内存满了,但是过一会又开始下降,说明是内存开始回收。

一旦开始对客户端大量进程结束,cpu的利用率会到达100%(而一般不能这么做,一般不能超过80%)

这时候就要调整 TCP/IP协议栈了

5242884k差不多为2G

1024字节
2*100w差不多为2G。(通过这种方式计算出来)

总的缓存=(每个fd发送缓存+每个fd接受缓存)*fd数量


如果想做到千万并发,就要用到用户态协议栈了

如果想提升客户端连接速度,可以将100个listenfd放入100个线程中去
把clientfd和listenfd放到不同的线程中

如果只利用一个端口8888,开多个进程


相关文章
|
9月前
|
C# 图形学 开发者
Unity开发中使用UnityWebRequest从HTTP服务器下载资源。
总之,UnityWebRequest就是游戏开发者手中的万能钓鱼竿,既可以获取文本数据,也能钓上图片资源,甚至是那声音的涟漪。使用UnityWebRequest的时候,你需要精心准备,比如确定URL、配置请求类型和头信息;发起请求;巧妙处理钓获的数据;还需要机智面对网络波澜,处理各种可能出现的错误。按照这样的过程,数据的钓取将会是一次既轻松愉快也效率高效的编程钓鱼之旅。
500 18
|
11月前
|
Go API 定位技术
MCP 实战:用 Go 语言开发一个查询 IP 信息的 MCP 服务器
随着 MCP 的快速普及和广泛应用,MCP 服务器也层出不穷。大多数开发者使用的 MCP 服务器开发库是官方提供的 typescript-sdk,而作为 Go 开发者,我们也可以借助优秀的第三方库去开发 MCP 服务器,例如 ThinkInAIXYZ/go-mcp。 本文将详细介绍如何在 Go 语言中使用 go-mcp 库来开发一个查询 IP 信息的 MCP 服务器。
677 2
|
监控 前端开发 应用服务中间件
小游戏源码开发搭建技术栈和服务器配置流程
近些年不同场景游戏层出不穷,现就小游戏开发技术应用及功能详细剖析!
|
存储 人工智能 自然语言处理
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
ChatMCP 是一款基于模型上下文协议(MCP)的 AI 聊天客户端,支持多语言和自动化安装。它能够与多种大型语言模型(LLM)如 OpenAI、Claude 和 OLLama 等进行交互,具备自动化安装 MCP 服务器、SSE 传输支持、自动选择服务器、聊天记录管理等功能。
2844 16
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
|
IDE 开发工具 C语言
C++一分钟之-嵌入式编程与裸机开发
通过这些内容的详细介绍和实例解析,希望能帮助您深入理解C++在嵌入式编程与裸机开发中的应用,提高开发效率和代码质量。
448 13
|
安全 开发工具 Swift
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发。基础语法涵盖变量、常量、数据类型、运算符、控制流等,高级特性包括函数、闭包、类、结构体、协议和泛型。
533 2
|
弹性计算 小程序 Linux
ECS开发使用体验
ECS的使用经历感受
|
5月前
|
弹性计算 运维 安全
阿里云轻量应用服务器与云服务器ECS啥区别?新手帮助教程
阿里云轻量应用服务器适合个人开发者搭建博客、测试环境等低流量场景,操作简单、成本低;ECS适用于企业级高负载业务,功能强大、灵活可扩展。二者在性能、网络、镜像及运维管理上差异显著,用户应根据实际需求选择。
451 10
|
5月前
|
运维 安全 Ubuntu
阿里云渠道商:服务器操作系统怎么选?
阿里云提供丰富操作系统镜像,涵盖Windows与主流Linux发行版。选型需综合技术兼容性、运维成本、安全稳定等因素。推荐Alibaba Cloud Linux、Ubuntu等用于Web与容器场景,Windows Server支撑.NET应用。建议优先选用LTS版本并进行测试验证,通过标准化镜像管理提升部署效率与一致性。
|
5月前
|
弹性计算 ice
阿里云4核8g服务器多少钱一年?1个月和1小时价格,省钱购买方法分享
阿里云4核8G服务器价格因实例类型而异,经济型e实例约159元/月,计算型c9i约371元/月,按小时计费最低0.45元。实际购买享折扣,1年最高可省至1578元,附主流ECS实例及CPU型号参考。
606 8