80.如何评估一台服务器能承受的最大TCP连接数

文章目录

  • 一、一个服务端进程最多能支持多少条 TCP 连接?
  • 二、一台服务器最大最多能支持多少条 TCP 连接?
  • 三、总结

一个服务端进程最大能支持多少条 TCP 连接?

一台服务器最大能支持多少条 TCP 连接?

很多朋友可能第一反应就是端口的限制,端口号最多是 65536个,那就最多只能支持 65536TCP 连接。

实际上这是不对的!

一、一个服务端进程最多能支持多少条 TCP 连接?

首先我们要知道 TCP 连接本质上在内核里就是一个 socket 对象。

struct socket {  
    ....
    //INET域专用的一个socket表示, 提供了INET域专有的一些属性,比如 IP地址,端口等
    struct sock             *sk;  
    //TCP连接的状态:SYN_SENT、SYN_RECV、ESTABLISHED.....
    short                   type;  
    ....
};  

struct inet_sock {  
...
  __u32    daddr;   //IPv4的目标地址。  
  __u16    dport;   //目标端口。   
  __u32    saddr;   //源地址。  
  __u16    sport;   //源端口。  
...
};  

这个 socket 对象也就是一个数据结构,里面包含了 TCP 四元组的信息:源IP、源端口、目标IP、目标端口

在这里插入图片描述

所以, 只要确认了【源IP、源端口、目标IP、目标端口】这四个信息,就能在内核中找到这个 socket 对象,也就能确定一条 TCP 连接。

一个服务端进程通常是监听 1 个端口号(当然也可能监听多个端口号,这里不考虑),比如一个nginx 服务,一般就是监听 443 端口。

服务端进程除了会固定监听某个一个端口之外,也通常会绑定 0.0.0.0 IP 地址

这个IP地址是特殊的, 0.0.0.0 指的是本机上的所有IPV4地址,如果一个主机有两个 IP 地址,192.168.1.1 10.1.2.1,并且该主机上的一个服务监听的地址是0.0.0.0,那么通过两个 IP 地址都能够访问该服务。

所以一个服务端进程,意味着他的 IP地址和端口号是固定的(比如0.0.0.0:443)

也就是当客户端与服务端建立一条 TCP 连接的时候,这个 TCP 连接的四元组信息中服务端的 IP地址和端口号是固定的(如nginx固定在本机0.0.0.0:443),能产生变化的就是客户端的 IP 地址和端口号了,即在一个服务器上,对于一个已经绑定了某个固定端口的进程而言,它的socket四元组中已经有两个是固定的了(目标地址、目标端口),能变化的就是源地址和源端口

因此,一个服务端进程最大能支持的 TCP 连接个数的计算公式如下:

最大TCP连接数=客户端的IP数X客户端的端口数

IPv4,客户端的 IP 数最多为 232 次方(源地址__u32),客户端的端口数最多为 216 次方(源端口__u32)

那么一个服务端进程理想情况下,最大的 TCP 连接数约为 248次方(2^32 (ip数) * 2^16 (端口数),这数值是非常夸张的了,约等于两百多万亿!
当然,服务端进程最大能支持的 TCP 连接数远不能达到理论上限,还会受到文件描述符、内存大小资源的限制,毕竟 socketLinux 的视角其实就是文件资源,而且一个 socket 对象也会占用一定的内存资源。

因此,会受以下因素影响:

  • 文件描述符限制,每个 TCP 连接都是一个文件,如果文件描述符被占满了,会发生 Too many open filesLinux 对可打开的文件描述符的数量分别作了三个方面的限制:
    • 系统级:当前系统可打开的最大数量,通过 cat /proc/sys/fs/file-max 查看;
    • 用户级:指定用户可打开的最大数量,通过 cat /etc/security/limits.conf 查看;
    • 进程级:单个进程可打开的最大数量,通过 cat /proc/sys/fs/nr_open 查看;
  • 内存限制,每个 TCP 连接都要占用一定内存,操作系统的内存是有限的,如果内存资源被占满后,会发生 OOM

二、一台服务器最大最多能支持多少条 TCP 连接?

前面分析是一个服务端进程理的情况,理论上能最大支持约为 248 次方(2^32 (ip数) * 2^16 (端口数),约等于两百多万亿!

那到了一台服务器的视角就会有一点不一样。

一台服务器是可以有多个服务端进程的,每个服务端进程监听不同的端口,比如:ssh22Redis6379,当然所有65535个端口你都可以用来监听一遍。

当然所有65535个端口你都可以用来监听一遍,这样理论上线就到了2的32次方(ip数)×2的16次方(port数)×2的16次方(服务器port数)个,感兴趣你可以算一下,这个基本相当于无穷个了。

不过理想和实际总是会有差距的!

因为Linux每维护一条TCP连接都要花费资源,处理连接请求,保活,数据的收发时需要消耗一些CPU,维持TCP连接主要消耗内存。

我们的关注点是考虑最大多少个连接,所以我们先不考虑数据的收发,那么TCP在静止的状态下,就不怎么消耗CPU了,主要消耗内存,而Linux上内存是有限的。

首先,我们要知道一条处于 ESTABLISH 状态的 TCP 连接具体占用多大内存?

一个 TCP 对象占用的大小,等于它所包含的一些数据结构占用大小的总和,也是就把上面这些数据结构的大小累加起来,就是一个 TCP 连接占用的大小了。

这里直接给大家一个结论,一条处于 ESTABLISH 状态的 TCP 连接占用的大小是 3.44 KB(0.81K+2.19K+0.19K+0.25K)

图片

TCP对象内存开销总结
也就是,每一条静止状态的TCP连接大约需要吃 3.44K 的内存。

那么 8 GB 物理内存的服务器,最大能支持的 TCP 连接数=8GB/3.44KB=2,438,956(约240万)

当然, 实际过程中的 TCP 连接,肯定不是静止状态的,还会进行发送数据和接收数据了,那么这些过程还是会额外消耗更多的内存资源的,并发很难达到百万级别。

三、总结

一个服务端进程最多能支持多少条 TCP 连接?

如果在不考虑服务器的内存和文件句柄资源的情况下,理论上一个服务端进程最多能支持约为 2 的 48 次方(2^32 (ip数) * 2^16 (端口数),约等于两百多万亿!

但是在实际中是支持不了这个数值的,每个 TCP 连接都是一个文件,会占用文件句柄资源,也会占用一定的内存空间。

一台服务器最大最多能支持多少条 TCP 连接?

一台服务器是可以有多个服务端进程的,每个服务端进程监听不同的端口,当然所有65535个端口你都可以用来监听一遍。

当然所有65535个端口你都可以用来监听一遍,这样理论上线就到了2的32次方(ip数)×2的16次方(port数)×2的16次方(服务器port数)个,这个基本相当于无穷个了

但是 Linux每维护一条TCP连接都要花费内存资源的,每一条静止状态(不发送数据和不接收数据)的 TCP 连接大约需要吃 3.44K 的内存,那么 8 GB 物理内存的服务器,最大能支持的 TCP 连接数=8GB/3.44KB=2,438,956(约240万)

实际过程中的 TCP 连接,还会进行发送数据和接收数据了,那么这些过程还是会额外消耗更多的内存资源的,所以一台8 GB的服务器并发很难达到百万级别。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3页面跳转产生白屏,刷新后能正常展示的解决方案

可以依次检查以下问题: 1.是否在根组件标签最外层包含了个最大的div盒子包裹内容。 2.看看是否在template标签下面直接有注释,如果有需要把注释写到div里面。(即根标签下不要直接有注释) 3.在router-view 中给路由添加key标识。 …

DevOps落地笔记-06|代码预检查:提高入库代码质量的神兵利器

上一讲主要介绍了从软件开发的需求阶段就要关注非功能需求以及如何有效关注非功能需求,希望你对非功能需求引起重视,对软件的质量引起重视。除了对非功能需求的关注,代码本身的质量也是决定软件质量的关键因素,比如:代…

Docker中配置MySql环境

目录 一、简单安装 1. 首先从Docker Hub中拉取镜像 2. 启动尝试创建MySQL容器,并设置挂载卷。 3. 查看mysql8这个容器是否启动成功 4. 如果已经成功启动,进入容器中简单测试 4.1 进入容器 4.2 登录mysql中 4.3 进行简单添加查找测试 二、主从复…

判断当前设备是不是安卓或者IOS?

代码(重要点): 当前文件要是 xxx.js文件,就需要写好代码后调用才会执行: // 判断是不是安卓 const isAndroid () > {return /android/.test(navigator.userAgent.toLowerCase()); }// 判断是不是ios const isIOS () > {return /iphone|ipad|ipod/.test(navigator.use…

【操作系统·考研】文件系统

1.概述 文件系统(File System)提供高效和便捷的磁盘访问,以便允许存储、定位、提取数据。 严格来说,VFS并不是一种实际的FS,它只存在于内存中,不存在与任何外存空间中。 VFS在系统启动时建立,在系统关闭时消亡。 2.结…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextClock组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextClock组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、TextClock组件 TextClock组件通过文本将当前系统时间显示在设备上。支持不同…

VMware vCenter告警:vSphere UI运行状况警报

vSphere UI运行状况警报 不会详细显示告警的具体内容,需要我们自己进一步确认告警原因。 vSphere UI运行状况警报是一种监控工具,用于检测vSphere环境中的潜在问题。当警报触发时,通常表示系统遇到了影响性能或可用性的问题。解决vSphere UI…

2024斋月大促提前,跨境卖家请收好这份准备指南与大促策略

市场覆盖西欧、中东、东南亚、北非地区的跨境电商卖家注意了,2024年的斋月即将开启,较往年日期,今年提前了10天左右,斋月的第一天预测在3月11日星期一到来。 根据Google搜索数据可知,目前已经进入高频“斋月”搜索期&…

nginx刷新404问题

问题分析 在配置好 nginx 转发之后,发现页面能正常打开,但只要按 F5 刷新之后就会报 404。这是因为 web 单页面开发模式,只有一个 index.html 入口,其他路径是前端路由去跳转的,nginx 没有对应这个路径,然后…

安装GPU版本Pytorch(全网最详细过程)

目录 一、前言 二、安装CUDA 三、安装cuDNN 四、安装Anacanda 五、安装pytorch 六、总结 一、前言 最近因为需要安装GPU版本的Pytorch,所以自己在安装过程中也是想着写一篇博客,把整个过程记录下来,在整个过程中也遇到了不少的问题&a…

大数据开发之离线数仓项目(用户行为采集平台)(可面试使用)

第 1 章:数据仓库概念 数据仓库,是为企业指定决策,提供数据支持的,可以帮助企业,改进业务流程、提高产品质量等。 数据仓库的输入数据通常包括:业务数据、用户行为数据和爬虫数据等。 业务数据&#xff1a…

【Linux C | I/O模型】IO复用 | select、pselect函数详解(看完就会用了)

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

【Eclipse平台】2 Eclipse Workbench工作台介绍

Eclipse Workbench工作台介绍 本文介绍Eclipse工作台Workbench。 当工作台启动时,首先看到的是一个对话框,该对话框允许我们选择工作区的位置。工作区是存储工作的目录。现在,只需单击“确定”即可选择默认位置。 选择工作区位置后&#x…

LVGL部件4

一.列表部件 1.知识概览 2.函数接口 1.lv_list_add_btn lv_list_add_btn 是 LittlevGL(LVGL)图形库中的一个函数,用于向列表(list)对象中添加一个按钮(button)。 函数原型为:lv_ob…

数据库复试-SQL数据定义与数据查询语句

数据库复试-SQL数据定义与数据查询语句 使用mysql数据库代替之前的sqlserver (完全使用命令行进行操作) 一:登录数据库登录与创建 mysql -uroot -p 123456 CREATE TABLE Student(Sno CHAR(9) PRIMARY KEY, /*主键约束*/Sname CHAR(20) UNIQUE, /*唯一值*/Ssex …

关于标准那些事——第十篇 符号标准

“符号”几乎是无处不在的,无论是生活、学习还是工作中,每个人每天都会碰到,只是我们没有意识到她的存在。正因如此,符号标准在不同场景、不同领域都发挥着统一认知,规范行为的作用,其简约、易用和一致性的…

分布式事务(四)——TCC补偿模式解决方案

系列目录: 《分布式事务(一)—— 事务的基本概念》 《分布式事务(二)—— CAP和Base理论》 《分布式事务(三)—— 两阶段提交解决方案(2PC)》 一、常见分布式事务解决…

轻型民用无人机驾驶航空器安全操控——理论考试多旋翼部分笔记

今天已经可以在线考取轻型民用无人机驾驶航空器执照了,所以我也在在线观看完视频之后整理了如下的知识点,所有知识点全部来自UOM平台。 目录 航空器知识 (1)多旋翼民用无人驾驶航空器螺旋桨的作用 (2&#x…

仰暮计划|“从米票、肉票、糖果票到肥皂票、煤票、棉花票等,生活里头的方方面面都能用粮票买到”

口述人:牛翠英(女) 整理人:霍芝冉 口述人基本信息:现68岁,河南省安阳市北关区霍家村人,现居河南安阳市区。 奶奶一生辛劳,操持家务;亲眼见证了时代变迁,社会发展,…

小米商城服务治理之客户端熔断器(Google SRE客户端熔断器)

目录 前言 一、什么是Google SRE熔断器 二、Google SRE 熔断器的工作流程: 三、客户端熔断器 (google SRE 熔断器) golang GRPC 实现 四、客户端熔断器 (google SRE 熔断器) golang GRPC单元测试 大家可以关注个人博客:xingxing – Web Developer …