一台服务器,最大支持的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

相关推荐
想躺在地上晒成地瓜干23 分钟前
树莓派超全系列教程文档--(57)如何设置 Apache web 服务器
服务器·apache·树莓派·raspberrypi·树莓派教程
小墙程序员39 分钟前
一文了解网络连接的完整流程
网络协议·tcp/ip
liulilittle3 小时前
OpenSSL 的 AES-NI 支持机制
linux·运维·服务器·算法·加密·openssl·解密
yzx9910133 小时前
柑橘检测模型
服务器·人工智能·深度学习·算法
沐土Arvin4 小时前
三次握手建立连接,四次挥手释放连接——TCP协议的核心机制
java·网络·tcp/ip
游戏开发爱好者84 小时前
iOS App上线前的安全防线:项目后期如何用Ipa Guard与其他工具完成高效混淆部署
websocket·网络协议·tcp/ip·http·网络安全·https·udp
SZ1701102314 小时前
IGP(Interior Gateway Protocol,内部网关协议)
运维·服务器·gateway
moxiaoran57534 小时前
Spring Cloud Gateway 动态路由实现方案
运维·服务器·前端
知之则吱吱5 小时前
亚马逊云服务器(AWS)会限制用户使用吗?深度解读AWS资源政策
服务器·经验分享
freyazzr5 小时前
TCP/IP 网络编程 | Reactor事件处理模式
开发语言·网络·c++·网络协议·tcp/ip