赞
踩
背景:
先要明白一个概念,一台服务器可以做为客户端和服务端,是相对而言的。既然如此,我们分开看。
客户端理论最大并发数:
情况1:
这个 64 k 的端口号实际上说的是一个 ip 下的可用端口号数量。而一台 Linux 机器上是可以配置多个 IP 的。假如配置了 20 个 IP,那这样一台客户端机就可以发起 120 万多个 TCP 连接了。
情况2:
再退一步讲,假定一台 Linux 上确实只有一个 IP,那它就只能发起 64 k 条连接了吗? 其实也不是的。
根据四元组的理论,只要服务器的 IP 或者端口不一样,即使客户端的 IP 和端口是一样的。这个四元组也是属于一条完全不同的新连接。
比如下面的两条连接里,虽然客户端的 IP 和端口完全一样,但由于服务器侧的端口不同,所以仍然是两条不同的连接。
所以一台客户端机器理论并发最大数是一个比服务器的两百万亿更大的一个天文数字(因为四元组里每一个元素都能变)。
检查Linux可用端口参考这篇文章
对于服务器来说,最大支持的并发连接是多少呢?就有人开始说了:“服务器端理论也是端口限制吗?”。假设如果受影响的话,那我们的mysql服务器只监听了一个80端口。那Nginx只能接受一个TCP连接?这明显是太荒唐了。因为一个客户端有多个端口,根据四元组,参考下面结论。
服务端理论最大并发数:
不过理想和实际总是会有差距的,因为Linux每维护一条TCP连接都要花费资源。处理连接请求,保活,数据的收发时需要消耗一些CPU,维持TCP连接主要消耗内存。所以能连接多少得看服务器内存。
结论:一条TCP连接如果不发送数据的话,消耗内存是3.3K左右,非静态根据传输数据大小而变化。
参考:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。