一台服务器可以支持多少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所能使用的端口范围,可以修改这个内核参数的值。
相关推荐
小松学前端11 分钟前
第六章 7.0 LinkList
java·开发语言·网络
城南vision28 分钟前
计算机网络——TCP篇
网络·tcp/ip·计算机网络
Ciderw1 小时前
块存储、文件存储和对象存储详细介绍
网络·数据库·nvme·对象存储·存储·块存储·文件存储
lihuhelihu1 小时前
第3章 CentOS系统管理
linux·运维·服务器·计算机网络·ubuntu·centos·云计算
山东布谷科技官方2 小时前
布谷直播源码部署服务器关于数据库配置的详细说明
运维·服务器·数据库·直播系统源码·直播源码·直播系统搭建·直播软件开发
爱吃喵的鲤鱼2 小时前
linux进程的状态之环境变量
linux·运维·服务器·开发语言·c++
Tony聊跨境2 小时前
独立站SEO类型及优化:来检查这些方面你有没有落下
网络·人工智能·tcp/ip·ip
2403_875736872 小时前
道品科技智慧农业中的自动气象检测站
网络·人工智能·智慧城市
荒Huang3 小时前
Linux挖矿病毒(kswapd0进程使cpu爆满)
linux·运维·服务器
九河云3 小时前
如何选择适合的AWS EC2实例类型
服务器·云计算·aws