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

news2025/2/4 2:32:36

文章目录

  • 一、一个服务端进程最多能支持多少条 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的服务器并发很难达到百万级别。

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

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

相关文章

【RT-DETR有效改进】利用YOLO-MS的MSBlock模块改进ResNet中的Bottleneck(RT-DETR深度改进)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文给大家带来的改进机制是利用YOLO-MS提出的一种针对于实时目标检测的MSBlock模块(其其实不能算是Conv但是其应该是一整个模块),我们将其用于替换我们ResNet中Basic组合出一种新的结构,来替换我们网络中的…

Spring:JDBCTemplate 的源码分析

一:JdbcTemplate的简介 JdbcTemplate 是 Spring Template设置模式中的一员。类似的还有 TransactionTemplate、 MongoTemplate 等。通过 JdbcTemplate 我们可以使得 Spring 访问数据库的过程简单化。 二:执行SQL语句的方法 1:在JdbcTempla…

智能末世战争之机器人的反击

在遥远的未来,地球陷入了一场空前的战争。这场战争不同于以往的任何战争,因为这是由人工智能和机器人主导的战争。在战争爆发之前,人类一直依赖AI和机器人来提高生产效率和生活质量。然而,随着AI技术的飞速发展,机器人…

H5 简约四色新科技风引导页源码

H5 简约四色新科技风引导页源码 源码介绍:一款四色切换自适应现代科技风动态背景的引导页源码,源码有主站按钮,分站按钮2个,QQ联系站长按钮一个。 下载地址: https://www.changyouzuhao.cn/11990.html

flinkcdc 3.0 尝鲜

本文会将从环境搭建到demo来全流程体验flinkcdc 3.0 包含了如下内容 flink1.18 standalone搭建doris 1fe1be 搭建整库数据同步测试各同步场景从检查点重启同步任务 环境搭建 flink环境(Standalone模式) 下载flink 1.18.0 链接 : https://archive.apache.org/dist/flink/flink…

【大数据】专业融合型人才迎来发展良机-国家数据局正式揭牌

⭐简单说两句⭐ 作者:后端小知识 CSDN个人主页:后端小知识 🔎GZH:后端小知识 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 摘要: 新华社北京10月26日电 《中国证券报》26日刊发文章…

shell - 正则表达式和grep命令和sed命令

一.正则表达式概述 1.正则表达式定义 1.1 定义 使用字符串描述、匹配一系列符合某个规则的字符串 1.2 了解 普通字符: 大小写字母、数字、标点符号及一些其它符号元字符: 在正则表达式中具有特殊意义的专用字符 1.3 层次分类 基础正则表达式扩展正…

git修改密码后mac使用sourceTree出现Authentication failed错误

1、退出sourceTree 2、在钥匙串中删除git对应站点Access Key 3、执行命令:git config --system --unset credential.helper 4、重新启动sourceTree,这时会弹出输入密码框,重新输入密码即可

react 之 UseMemo

useMemo 看个场景 下面我们的本来的用意是想基于count的变化计算斐波那契数列之和,但是当我们修改num状态的时候,斐波那契求和函数也会被执行,显然是一种浪费 // useMemo // 作用:在组件渲染时缓存计算的结果import { useState …

树——二叉搜索树

二叉搜索树 概述 随着计算机算力的提升和对数据结构的深入研究,二叉搜索树也不断被优化和扩展,例如AVL树、红黑树等。 特性 二叉搜索树(也称二叉排序树)是符合下面特征的二叉树: 树节点增加 key 属性,用来…

Git介绍与常用命令总结

Git介绍与其常用命令总结 1、Git介绍2、Git的使用3、Git常用命令3.1 初始化仓库3.2 克隆仓库3.3 配置用户信息3.4 提交代码(Commit)3.5 推送代码(Push)3.6 拉取代码(Pull)3.7 分支(Branch)3.8 远程仓库(Remote)3.9 撤销回退本地改动3.10 更新本地仓库与远程仓库 1、Git介绍 Gi…

编程流程图

对于复杂流程,我做开发之前一般会 先画一下流程图。特别是多个部门有交叉的情况下: processOn: 这个是我之前 一直的选择,他可以画上面的这些,流程图,网页操作,但是他不是免费的,查过…

【LVGL环境搭建】

LVGL环境搭建 win模拟器环境搭建一.二.三.四.五. Ubuntu模拟器环境搭建一. 前置准备二. 下载LVGL Source code:三. 安装sdl2:四. 开启VScode执行五. 安装扩展套件六. 按F5执行七. 执行结果 win模拟器环境搭建 一. 二. 三. 四. 五. Ubuntu模拟器环境…

同城上门预约软件开发:改变生活服务模式

随着互联网技术的飞速发展,人们的生活方式也在发生着深刻的变化。特别是在生活服务领域,新的需求和模式不断涌现。其中,同城上门预约服务正逐渐成为一种新的趋势。本文将探讨开发同城上门预约软件的意义、市场需求、功能设计以及面临的挑战。…

C++类和对象入门(一)

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂,年薪百万! 一、面相过程和面向对象的初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤&#…

大语言模型之LlaMA系列-LlaMA 2及LlaMA_chat(下)

多转一致性的系统消息 - System Message for Multi-Turn Consistency 在对话设置中,某些指示应适用于所有对话轮次。 例如,简洁地响应,或"充当"某个公众人物。当我们向Llama 2-Chat提供此类指示时,后续应响应始终遵守约…

专业139总分400+南昌大学811信号与系统考研经验电子信息与通信工程集成电路

今年专业课811信号与系统139分,总分400,顺利上岸南昌大学,回首这一年的复习,有很多经验想和大家分享,希望对大家复习会有一些帮助。专业课:139分,811信号与系统 主要参考书:《信号与…

2024年人工智能应用与先进制造科学国际学术会议(ICAIAAMS 2024)

2024年人工智能应用与先进制造科学国际学术会议(ICAIAAMS 2024) 2024 International Conference on Artificial Intelligence Applications and Advanced Manufacturing Science (ICAIAAMS 2024) 会议简介: 2024年人工智能应用与先进制造科学国际学术会议&#xff…

C语言基础:头歌练习数组练习

(字符串插入) 任务描述 题目描述:输入两个字符串a和b,将b串中的最大字符插入到a串中最小字符后面。 样例输入: MynameisAmy MynameisJane 样例输出: MynameisAymy 题目分析:a字符串中最小的字符是A…

黑马程序员——html css基础——day06——Flex布局

目录: 小米登录 第一步搭建大盒子logo设置标题和input设置密码框和登录按钮完整写法:爱宠案例 大盒子dog搭建h2标题的做法ul布局修改li和a链接的样式给li添加背景图片完整的写法:标准流浮动 基本使用产品区域布局 左右布局区域小li布局清除浮…