转载自 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系统出于安全角度的考虑,在多个位置都限制了可打开的文件描述符的数量,包括系统级、用户级、进程级。这三个限制的含义和修改方式如下:"
另外tcp连接还会有数据传输,就要有接收的缓存区,即使是空的连接不传数据,也会默认分配一定的大小
可以通过命令来查看接收缓存区大小
sysctl -a | grep rmem
4096代表TCP连接所需分配的最少字节数默认4k内存,16777216代表最大会分配16M
综上,服务器本身内存的大小 + 服务器的文件描述符最大打开数的配置 + TCP连接的传输的数据量
三个主要因素影响了一台linux服务器的TCP连接数