2021年9月

一台机器理论最多能支撑多少个TCP连接

对于服务器来说,最大支持的并发连接是多少呢?

其实,最先受限制的是内核文件打开数,不过这个可以通过修改内核参数来避免。
一条TCP连接是由一个四元组组成的。不考虑地址重用(unix的SO_REUSEADDR选项)的情况下,对于我们这台Nginx Server来说,它的IP和端口是固定的。cp连接4元组中只有remote ip(也就是client ip)和remote port(客户端port)是可变的。它可能建立的最大的连接数是2的32次方(ip数)×2的16次方(port数)。这是2.8*10的14次方的一个大数字,两百万亿!!

Linux上除了监听80以外,还可以监听其它的端口,例如Mysql的3306, Redis的6339,当然所有65535个端口你都可以用来监听一遍。这样理论上线就到了2的32次方(ip数)×2的16次方(port数)×2的16次方(服务器port数)个。感兴趣你可以算一下,这个基本相当于无穷个了。

不过理想和实际总是会有差距的,因为Linux每维护一条TCP连接都要花费资源。处理连接请求,保活,数据的收发时需要消耗一些CPU,维持TCP连接主要消耗内存。我们题目的问题是考虑最大多少个连接,所以我们先不考虑数据的收发。那么TCP在静止的状态下,就不怎么消耗CPU了,主要消耗内存。而Linux上内存是有限的。


- 阅读剩余部分 -