一台服务器可以支持多少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所能使用的端口范围,可以修改这个内核参数的值。
相关推荐
wuyk55519 分钟前
【Socket 进阶之路】第 7 章 IO 多路复用 select & poll 完整实战|多 fd 监听、超时等待、优缺点横向对比
服务器·开发语言·网络·数据库·物联网
人工智能培训34 分钟前
大语言模型:从语言理解到通用智能的跃迁
linux·服务器·前端·人工智能
东方护航数据恢复(深圳)43 分钟前
本地小算力设备数据恢复经典案例实操全解_东方护航数据恢复深圳店
大数据·服务器·算法·ai·gpu算力
阿明61 小时前
Linux进程【Linux】
linux·运维·服务器
Android系统攻城狮1 小时前
Linux Gstreamer深度解析之gst_audio_resampler_update调用流程与实战(三十)
linux·运维·服务器·gstreamer音视频·音视频进阶
dog2502 小时前
写一个时延固定的拥塞控制
网络
一木 之林2 小时前
手搓家庭服务器:二手装机、Docker部署、端口映射与frp内网穿透
服务器·人工智能·git·编辑器
酣大智2 小时前
华为 VRRP的抢占延迟时间
网络·tcp/ip·vrrp
hengmeida3 小时前
楼宇控制柜标准化项目交付完整规范
大数据·网络·笔记
2501_937860943 小时前
上篇:网络编程基础与UDP套接字编程
java·网络·计算机网络