一台服务器,最大支持的TCP连接数是多少?

一个服务端进程最大能支持多少条 TCP 连接?
一台服务器最大能支持多少条 TCP 连接?
一、原理
TCP 四元组的信息:源IP、源端口、目标IP、目标端口。
在这里插入图片描述

一个服务端进程最大能支持的 TCP 连接个数的计算公式:最大tcp连接数=客户端的IP数 * 客户端的端口数
对 IPv4,客户端的 IP 数最多为 2 的 32 次方,客户端的端口数最多为 2 的 16 次方。那么一个服务端进程理想情况下,最大的 TCP 连接数约为 2 的 48 次方(2^32 (ip数) * 2^16 (端口数),这数值是非常夸张的了,约等于两百多万亿。
服务端进程最大能支持的 TCP 连接数远不能达到理论上限,还会受到文件描述符、内存大小资源的限制,毕竟 socket 在 Linux 的视角其实就是文件资源,而且一个 socket 对象也会占用一定的内存资源。
限制因素:
文件描述符限制,每个 TCP 连接都是一个文件,如果文件描述符被占满了,会发生 Too many open files。Linux 对可打开的文件描述符的数量分别作了三个方面的限制:
系统级:当前系统可打开的最大数量,通过 cat /proc/sys/fs/file-max 查看;
用户级:指定用户可打开的最大数量,通过 cat /etc/security/limits.conf 查看;
进程级:单个进程可打开的最大数量,通过 cat /proc/sys/fs/nr_open 查看;
内存限制,每个 TCP 连接都要占用一定内存,操作系统的内存是有限的,如果内存资源被占满后,会发生 OOM。

二、计算tcp
因为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连接大约需要吃 3.44K 的内存。那么 8 GB 物理内存的服务器,最大能支持的 TCP 连接数=8GB/3.44KB=2,438,956(约240万)!当然, 实际过程中的 TCP 连接,肯定不是静止状态的,还会进行发送数据和接收数据了,那么这些过程还是会额外消耗更多的内存资源的,并发很难达到百万级别。

三、压测验证
3.1-postman
3.2-ab
3.3-jmeter

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

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

相关文章

代码随想录 贪心算法-难度题目-区间问题

目录 55.跳跃游戏 45.跳跃游戏|| 452.用最少数量的箭引爆气球 435.无重叠区间 763.划分字母区间 56.合并区间 55.跳跃游戏 55. 跳跃游戏 中等 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大…

【AI】举例说明计算机视觉(CV)技术的优势和挑战。

计算机视觉(CV)技术是一种让计算机能够理解和解释图像和视频内容的技术。以下是计算机视觉技术的优势和挑战的一些例子: 优势: 自动化处理:计算机视觉技术可以实现自动化处理,大大节省了人力成本和时间成本…

Linux下ifconfig,netstat 无法正常使用解决办法

yum install -y net-toolsifconfig替代查询命令: 查看网络接口信息: ip addr show显示某个特定接口(例如eth0)的详细信息: ip addr show eth0(实际网卡名)查看网络接口统计信息: ip …

JAVA中已有的栈和队列的实现

在Java中,有多种方式可以实现栈(Stack)和队列(Queue)的数据结构。以下是一些主要的实现方式: 1. 栈(Stack) 使用java.util.Stack类: java.util.Stack是Java提供的一个基…

基于springboot实现成人教育教务系统项目【项目源码+论文说明】

基于springboot实现成人教育教务系统演示 摘要 随着市场经济的产业化结构升级,人才结构也在不断发生这巨大的变化和变革。而且各大企业都在处于一个高速发展和壮大的阶段,在这个高速发展和结构化升级的时期对于人才的需求也在不断的增多。企业和用工单位…

Git高级玩法:Rebase、Cherry-pick与Stash实战解析

Git高级功能:理解Rebase、Cherry-pick与Stash 在软件开发过程中,Git作为版本控制系统,已经成为不可或缺的工具。而Git的高级功能,如Rebase、Cherry-pick与Stash,为开发者提供了更多的灵活性和便利性。本文将详细介绍这…

uView ui 安装步骤

uView是uni-app生态优秀的UI框架 安装说明 由于uView使用easycom模式,让您无需引入组件即可直接使用,但是此功能需要Hbuilder X 2.5.5及以上版本才支持,详见配置easycom组件模式。 easycom打包的时候是按需引入的,您可以放心引入…

关于应用程序自卸载能力的探讨

在当前数字化的时代背景下,应用程序的安装与卸载已成为我们日常生活及工作中常见的操作行为。对于“应用程序能否自我卸载”这一议题,引发了科技领域和广大用户群体的关注与讨论。本文将围绕该主题展开深入剖析,探究其实质内涵以及其可能产生…

【Python】新手入门学习:详细介绍组合/聚合复用原则(CARP)及其作用、代码示例

【Python】新手入门学习:详细介绍组合/聚合复用原则(CARP)及其作用、代码示例 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集…

Nmap最常用命令(非常详细)零基础入门到精通,收藏这一篇就够了

nmap是我们最常用的工具。但是命令太多了,没办法全部记下。我们在实际工作中只需要记住最常用的几条命令就行了。 主机发现 里面nmap,我们可以扫描在同一局域网内有哪些设备在线。常用命令如下: nmap 192.168.50.1/24 -sL 上面命令&#…

羊大师分析,羊奶和牛奶哪个更有营养

羊大师分析,羊奶和牛奶哪个更有营养 羊奶和牛奶都是营养丰富的奶制品,它们各自具有独特的营养价值和特点,因此无法简单地判断哪个更有营养。 羊奶中含有较高的脂肪和蛋白质,同时富含矿物质和维生素,如钙、磷、铁、锌以…

JSON 转换问题 $ref“: “$[0].list[1]

现象 [{"delete": false,"index": 0,"list": [{"duration": 71000,"id": 0,"mediumId": 9231114101362,"path": "","point": 100,"title": "垃圾"},{"d…

python | 类与对象

在 Python 中,我们用关键字 class 来定义类: class Player:pass Player 类中只有一条语句 pass,这是 Python 中的特殊语句,没有实际含义。 Python 在执行到它时也什么都不会做。不过它能够保证结构的完整性。例如,我…

揭秘FastStone Capture:一款强大且高效的截图工具

目录 【引子】【FastStone Capture概述】【安装步骤】【使用攻略】【核心功能解析】【总结】 【引子】 在数字化信息时代,无论是工作汇报、在线教学,还是日常交流中,屏幕截图已经成为我们必不可少的辅助工具。今天,我要为大家详细…

git svn混用

背景 项目代码管理初始使用的svn, 由于svn代码操作,无法在本地暂存,有诸多不便,另外本人习惯使用git. 所以决定迁移至git管理 迁移要求: 保留历史提交记录 迁移流程 代码检出 git svn svn_project_url git代码提交 修改本…

编写应用程序,输出满足1+2+3+~+n<8888的最大正整数n

/** * 寻找满足条件的最大整数。 * 程序通过累加整数,直到累加和大于等于给定值(8888)为止,然后输出满足条件的最大整数。 */ public class E { public static void main(String args[]){ int n1; // 从1开始累加整…

得物布局构建耗时优化方案实践

一、背景 当谈到移动应用程序的体验时,页面启动速度是其中至关重要的一点,更快的页面展示速度确保应用程序可以迅速加载并响应用户的操作, 从而提高用户使用 App 时的满意度。在页面启动的整个流程中,随着 UI 复杂度的上升,布局的…

高速口光口通信

1.通过transceiver ip 设置好硬件连接配置 2.open example 用自己的模块替换掉tx和rx数据模块 三:相关信号: 1:tx/rx_rset_done1表示初始化完成

【Java探索之旅】解密Java中的类型转换与类型提升

🎥 屿小夏 : 个人主页 🔥个人专栏 : Java编程秘籍 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一、类型转化1.1 自动类型转换(隐式类型转换)1.2 强制类型转换…

Arduino IDE的下载和安装

一、Arduino的介绍 Arduino是一款开源电子原型平台,主要包含两部分:硬件(各种型号的Arduino板)和软件(Arduino IDE)。这个平台由意大利的Massimo Banzi、David Cuartielles等人共同开发设计,并于…