【TCP】单台服务器并发 TCP 连接数到底可以有多少 ?

【TCP】单台服务器并发 TCP 连接数到底可以有多少 ?,第1张

长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持。

长连接,是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接。
聊天室或即时消息推送系统等,因为很多消息需要到产生时才推送给客户端,所以当没有消息产生时,就需要hold住客户端的连接,这样,当有大量的客户端时,要hold住大量的长连接。
在性能测试过程中,经常会接触到连接数相关的问题,有一个问题曾经困扰我好长时间,那就是一台服务器最多能支持多少链接数呢?

有的朋友可能会说是65535,因为 *** 作系统有65535个端口,那么这个答案准确吗?

首先先了解下如何标识一个链接(记住下面的概念,文章后面要用到), *** 作系统是通过一个四元组来标识一个TCP链接:

{本地ip,本地port,远程ip,远程port}

这四个要素唯一确定一个TCP链接,任意一个要素不相同,就认为是一个不同的链接。
在Linux系统中,一切皆文件,每一个TCP链接都要占用一个文件句柄,系统允许创建的链接数取决于句柄数的上限。超过这个值再创建链接就会报这样的错误:“Can't open so many files"。

通过命令ulimit -n可以查看当前系统允许打开文件数量的上限,在Linux中这个值默认是1024,也就是说默认情况下,只能创建1024个链接。同时这个值也是可以修改的,通过修改/etc/security/limitsconf文件,可以把这个值改大,一般服务器都会改的很大,比如我们的服务器上一般设置为1000000。
那这么说是不是就意味着只要我改的很大,链接数可以无限大了?

其实也并不是这样,创建链接的时候,一般分为两个端, 即链接的发起端和链接接收端。
比如我们现在使用Jmeter进行压测,被测系统部署在Tomcat服务器10003上,使用的是8080端口。

如果我们用5个并发来进行压测的话,创建的链接如下图所示:
对于Jmeter来说,它是链接发起端,Jmeter创建了5个链接去连接服务端的8080端口,每个新建链接会占用了一个端口号,如图中的10001-10005。在 *** 作系统中,端口号的范围是0-65535,其中0-1024是预留端口号,不可使用,其他的端口都是可以使用的。也就是说, 在链接发起端,受端口号的限制理论上最多可以创建64000左右链接。

那么有没有办法超过这个限制呢,答案是肯定的!

通过TCP标识的四元组可以看到,对于链接发起端,影响链接数的是本地ip和port,端口号受限于65535,已经没办法增加了。那我们可以增加本地ip来达到这个目的。一般情况下,服务器的一个网卡上只绑定了一个ip,对外通信都使用这个ip进行。其实网卡是支持一个绑定多个IP的,当然必须确保ip是有效的且未使用的。

# ifconfig eth0:1 10005

以上命令可以在eth0网卡上增加一个ip 10005,服务器网卡每增加一个ip,就可以允许在这个ip上再创建65535左右的链接数。
曾经做过一个邮件网关的链接数测试,目的是为了测试网关服务器可以接收并且保持多少TCP长连接。正常情况下,受限于单台机器65535端口号的影响,客户端想创建25万TCP长连接,至少需要4台机器。通过对客户端网卡绑定多IP的方法,成功在一台机器上创建了25万个链接。

当然,这种手段只是一种非常规的 *** 作,只是为了进行某种特殊场景的测试。正常情况下不推荐网卡绑定多个IP。
对于Tomcat服务器来讲,它是链接接收端,它是不是也受限于65535呢?

并不是,从上面图中可以看到,Jmeter发起的所有链接都创建在Tomcat服务器的8080端口,也就是说对于链接接收端,所有的链接占用的是同一个端口。

根据TCP标识四元组可以分析出, 一个链接接收端,最大的TCP链接数=所有有效ip排列组合的数量端口数量64000 ,这个计算结果应该是一个天文数字。 因此链接接收端支持的链接数理论上可以认为是无限大的。

上面介绍的一些数据都是理论上单台机器可以支持的TCP链接数, 实际情况下,每创建一个链接需要消耗一定的内存,大概是4-10kb,所以链接数也受限于机器的总内存。

链接发起端,活力全开才64000左右链接,内存最多才占用640M,一般客户端都能 满足,内存限制主要还是考虑服务器端。
虽然现在的集群,分布式技术可以为我们将并发负载分担在多台服务器上,那我们只需要扩展出数十台电脑就可以解决问题,但是我们更希望能更大的挖掘单台服务器的资源,先努力垂直扩展,再进行水平扩展,这样可以有效的节省服务器相关的开支(硬件资源、机房、运维人力、电力其实也是一笔不小的开支)。
首先需要考虑文件句柄的限制。在Linux下编写网络服务器程序的朋友肯定都知道每一个tcp连接都要占一个文件描述符,一旦这个文件描述符使用完了,新的连接到来返回给我们的错误是“Socket/File:Can't open so many files”。这时你需要明白 *** 作系统对可以打开的最大文件数的限制。

我们可以通过ulimit -n命令、/etc/security/limitsconf 文件 以及 /etc/sysctlconf 文件等来修改文件句柄数。

其次要考虑的是端口范围的限制, *** 作系统上端口号1024以下是系统保留的,从1024-65535是用户使用的。
由于每个TCP连接都要占一个端口号,所以我们最多可以有60000多个并发连接。我想有这种错误思路朋友不在少数吧?

面试官也比较喜欢在这里引导挖坑,类似的问题还有:一个UDP连接可以复用已经被TCP连接占用的端口嘛?

如何标识一个TCP连接?

系统使用一个4四元组来唯一标识一个TCP连接:

本地端口号 local port、本地IP地址 local ip、远端端口号 remote port、远端IP地址 remote ip。

server通常固定在某个本地端口上监听,等待client的连接请求。不考虑地址重用(unix的SO_REUSEADDR选项)的情况下,即使server端有多个ip,本地监听端口也是独占的,因此server端tcp连接4元组中只有remote ip(也就是client ip)和remote port(客户端port)是可变的,因此最大tcp连接为客户端ip数×客户端port数,对IPV4,不考虑ip地址分类等因素,最大tcp连接数约为2的32次方(ip数)×2的16次方(port数),也就是server端单机最大tcp连接数约为2的48次方。

上面给出的结论都是理论上的单机TCP并发连接数,实际上单机并发连接数肯定要受硬件资源(内存)、网络资源(带宽)的限制。
单台服务器最大支持多少连接数

>问题一:什么是并发数? 并发的意思是指网站在同一时间访问的人数,人数越大,瞬间带宽要求更高,我个人的网站要求较高,在上午10点访问人数最多,做过几个供应商的测试,互联在线这家的并发数量是真实的,并且同一时间访问,没有限制;其实并发数的大小和服务器的带宽也有直接关系,一般的服务器是限最高流量的,有些服务器和机房是不限最高带宽,所以能足够保证

问题二:并发数是什么意思 并发数
并发数,计算机网络术语,是指同时访问服务器站点的链接数。
由于虚拟主机是建立在每台服务器多用户的基础上的,也就是多个用户共同使用一台服务器。为了避免同一台服务器上的某一个用户的IIS链接人数过多或占用服务器资源过多而影响其它用户的正常使用,所以,目前所有虚拟空间提供商都对单个用户的IIS链接数,流量及服务器进程占用CPU的比率进行了相应的限制。 当某一个用户的站点超出了服务器上的设制后,访问站点时就会出现服务器忙,或目前访问该站点的人数过多,超出了WEB的处理能力等相关错误提示。

问题三:什么是服务器并发量?并发量如何计算 并发的意思是指网站在同一时间访问的人数,人数越大,瞬间带宽要求更高。服务器并发量分为:1业务并发用户数;2最大并发访问数;3系统用户数;4同时在线用户数;
说明服务器实际压力,能承受的最大并发访问数,既取决于业务并发用户数,还取决于用户的业务场景,这些可以通过对服务器日志的分析得到。
一般只需要分析出典型业务(用户常用,最关注的业务 *** 作)
给出一个估算业务并发用户数的公式(测试人员一般只关心业务并发用户数)
C=nL/T
C^=C+3×(C的平方根)
C是平均的业务并发用户数、n是login session的数量、L是login session的平均长度、T是指考察的时间段长度、C^是指业务并发用户数的峰值。
假设OA系统有1000用户,每天400个用户发访问,每个登录到退出平均时间2小时,在1天时间内用户只在8小时内使用该系统。
C=400×2/8=100
C^=100+3×(100的平方根)=100+3×10=130
另外,如果知道平均每个用户发出的请求数u,则系统吞吐量可以估算为u×C
精确估算,还要考虑用户业务 *** 作存在一定的时间集中性(比如上班后1小时内是OA系统高峰期),采用公式计算仍然会存在偏差。
285-104-1346

问题四:并发量是什么意思 就是同时登录的用户太多了,超过的系统可以承载的最大数量

问题五:服务器的并发是什么意思,怎么计算的! 服务器并发指的是多个用户同时访问数据库中的同一字段的行为。这样的用户行为对于服务器的性能是一种考验。
但是,再好的服务器也有自己的性能上限,当并发用户数过多的时候,再好的服务器也支持不住。事实上,我们在生活中经常能遇到由于并发用户过多而导致的系统缓慢甚至瘫痪现象。比方说,很多使用过那些在线考试报名系统的朋友都会发现,半夜登录系统报名比白天登录系统报名要容,网页反应速度也要快一些,这就是由于晚上的并发用户数比较小的原因。
对于IT运维人员来说服务器并发是恐怖的,因为服务器的最大用户并发数并不是IT运维人员所能控制的,我们能做到的只是采用各种手段来提升系统的性能,提升服务器的性能利用率。

问题六:什么叫产品的最大并发数? 最大并发数,顾名思义就是同时登陆该网址的最大人数, 或服务器同时接收下载的最大数量
并发连接数太大,对整体网络环境的稳定性有害,这是网站采取的一种限制手段没有其他的方法,只有等人少的时候下载了

问题七:网站服务器的并发是什么意思 并发,就是同时的链接

你可以理解为,同一秒钟,同时链接网络的客户端数量
当然准确的意义上是毫秒或者更低,
重在一个同时的概念

问题八:当前用户并发数已满是什么意思 就是同时登录的用户太多了,超过的系统可以承载的最大数量

问题九:oracle的并发量和事物量是什么意思 并发量 可以理解为 同一时刻 ACTIVE的SESSION数量 查看V$SESSION即可看到
事物量当然就是V$TRANSACTION中的数量

问题十:网站的最大并发数是如何估算的 并发用户数的计算公式 系统用户数:系统额定的用户数量,如一个OA系统,可能使用该系统的用户总数是2000个,那么这个数量,就是系统用户数 同时在线用户数:在一定的时间范围内,最大的同时在线用户数量 平均并发用户数的计算: C=nL / T 其中C是平均的并发用户数,n是平均每天访问用户数,L是一天内用户从登录到退出的平均时间( *** 作平均时间),T是考察时间长度(一天内多长时间有用户使用系统) 并发用户数峰值计算: C^约等于C + 3根号C 其中C^是并发用户峰值,C是平均并发用户数,该公式遵循泊松分布理论

这个没有什么具体参考价值,1000多是没有问题的。
为什么说没有具体参考价值呢,一个服务器的参数有很多内容。像cpu,宽带,内存, *** 作系统等等都有影响,你所说的只有内存和内存,并不能准确说出你要的最大的并发量承受。
并且这个并发量承受还得看应用的需求的,如果每个应用需要一CPU一内存,那只能承载100多,但是现在大部分应用是sql的并发,是没有需求的,没有限制。另外对你自身的网络有一定要求,你要是有需求的话还需要提升你的宽带质量。
希望我的回答对你有所帮助。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13301402.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-10
下一篇 2023-07-10

发表评论

登录后才能评论

评论列表(0条)

保存