【转载】linux服务器支持的TCP连接数

转载自 https://www.toutiao.com/i6904868846055391751/?timestamp=1607907150&app=news_article&group_id=6904868846055391751&use_new_style=1&req_id=20201214085230010202091096506F4443

TCP连接四元组:源IP地址、源端口、目的IP地址、目的端口

 

结论:和服务器的内存大小,服务器的内存分配设置,TCP连接传输的数据量  等有关

 

nginx的端口可能指定的是80端口,目标IP是服务器本身,所以源IP和源端口是可变的

 

linux中一切皆文件,所以tcp连接(socket)也会创建文件(内存文件),不会创建在磁盘上,或者说是一个文件标识符(file descriptor),类似文件,操作的接口和文件相同,都是open,close

如果同时保持很多个TCP连接,就是系统会打开很多个socket的标识符,打开文件会消耗内存资源

linux系统出于安全角度的考虑,在多个位置都限制了可打开的文件描述符的数量,包括系统级、用户级、进程级。这三个限制的含义和修改方式如下:"

  • 系统级:当前系统可打开的最大数量,通过fs.file-max参数可修改
  • 用户级:指定用户可打开的最大数量,修改/etc/security/limits.conf
  • 进程级:单个进程可打开的最大数量,通过fs.nr_open参数可修改

 

 

另外tcp连接还会有数据传输,就要有接收的缓存区,即使是空的连接不传数据,也会默认分配一定的大小

可以通过命令来查看接收缓存区大小

sysctl -a | grep rmem

 

 

 4096代表TCP连接所需分配的最少字节数默认4k内存,16777216代表最大会分配16M

 

综上,服务器本身内存的大小 + 服务器的文件描述符最大打开数的配置 + TCP连接的传输的数据量

三个主要因素影响了一台linux服务器的TCP连接数

 

posted @ 2022-02-09 09:21  坏男银  阅读(641)  评论(0编辑  收藏  举报