一台服务器可以支持多少TCP连接

前言

​ 在linux系统中一切皆文件,每当有一个tcp连接建立,那么就会打开一个文件描述符。在Linux系统中,文件描述符打开的个数是有限制的,当超过这个限制的时候内核就会跑出too many open files异常。

linux上能打开的最大文件数量受三个参数限制,分别是:

fs.file-max (系统级别参数):该参数描述了整个系统可以打开的最大文件数量。但是root用户不会受该参数限制(比如:现在整个系统打开的文件描述符数量已达到fs.file-max ,此时root用户仍然可以使用ps、kill等命令或打开其他文件描述符)

soft nofile(进程级别参数):限制单个进程上可以打开的最大文件数。只能在Linux上配置一次,不能针对不同用户配置不同的值

fs.nr_open(进程级别参数):限制单个进程上可以打开的最大文件数。可以针对不同用户配置不同的值

这三个参数之间有互相耦合的关系,配置是需要注意以下三点:

  1. 如果想加大soft nofile,那么hard nofile参数值也需要一起调整。如果因为hard nofile参数值设置的低,那么soft nofile参数的值设置的再高也没有用,实际生效的值会按照二者最低的来。
  2. 如果增大了hard nofile,那么fs.nr_open也都需要跟着一起调整(fs.nr_open参数值一定要大于hard nofile参数值)。如果不小心把hard nofile的值设置的比fs.nr_open还大,那么后果比较严重。会导致该用户无法登录,如果设置的是*,那么所有用户都无法登录
  3. 如果加大了fs.nr_open,但是是用的echo "xxx" > .../fs/nr_open命令来修改的fs.nr_open的值,那么刚改完可能不会有问题,但是只要机器一重启,那么之前通过echo命令设置的fs.nr_open值便会失效,用户还是无法登录。所以非常不建议使用echo的方式修改内核参数!!!

一、一台服务器最大能支持多少连接

​ TCP连接从根本上来看其实是客户端和服务器同时维护的一组socket内核对象(就是四元组)。如果只以ESTABLISH状态的连接来算(只是建立连接,但是不收发数据也不处理业务逻辑),一台服务器支持多少连接?以4G内存的服务器为例子。

​ 一条ESTABLISH状态的连接大约消耗【3.3KB内存】,那么通过计算得出【可以建立100w+的TCP连接】,当然这里理论计算的数量,实际不可能有这么多,因为服务器还需要提供计算以及收发数据的能力这些都是要消耗内存的。

​ 服务器开销的大头往往不是连接本身,而是处理具体业务。

二、一台客户端最大能支持多少连接

​ 客户端与服务器建立连接服务会消耗客户端的一个端口,一台机器的端口有65535个。

  1. 如果什么都不考虑的话,那么一台计算器是可以建立65535个TCP连接
  2. 实际情况不可能建立这么多,建立连接的个数受内核参数net.ipv4.ip_local_port_range限制,如果要修改client所能使用的端口范围,可以修改这个内核参数的值。
相关推荐
AI 小老六3 分钟前
Agent Runtime 如何用 Session、Memory、User Profile 和 Skill 实现外部学习
服务器·人工智能·学习·ai·架构·自动化
The Chosen One98510 分钟前
【操作系统】操作系统引导、虚拟机、进程通信、信号
linux·运维·服务器·操作系统·虚拟机·信号
宵时待雨13 分钟前
linux笔记归纳14:Socket编程TCP
linux·服务器·网络·笔记·tcp/ip
逐米时代1 小时前
工厂数字化规划:BIM与仿真让方案可验证
大数据·网络·人工智能
Brilliantwxx1 小时前
【Linux】自动化构建工具 make 与 Makefile
linux·运维·服务器·开发语言·自动化
caimouse1 小时前
Winsock 用户态库 (ws2_32.dll) 详细分析
网络
云边云科技_云网融合2 小时前
工业制造多厂区、供应链远程数据传输网络如何优化?
运维·服务器·网络
clear sky .2 小时前
[TCP]MCU上如何编辑TCP服务端程序,思路框架
服务器·网络·tcp/ip
方品2 小时前
【无标题】
服务器·人工智能·深度学习·nlp
FungLeo2 小时前
Flutter 带 TTL 的多级缓存设计:内存+磁盘+网络三层实战
网络·flutter·缓存·性能优化