问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-09-17 17:42

我来回答

1个回答

热心网友 时间:2023-10-17 05:53

长连接,指在一个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/limits.conf文件,可以把这个值改大,一般服务器都会改的很大,比如我们的服务器上一般设置为1000000。

那这么说是不是就意味着只要我改的很大,链接数可以无限大了?

其实也并不是这样,创建链接的时候,一般分为两个端, 即链接的发起端和链接接收端。

比如我们现在使用Jmeter进行压测,被测系统部署在Tomcat服务器10.0.0.3上,使用的是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 10.0.0.5

以上命令可以在eth0网卡上增加一个ip 10.0.0.5,服务器网卡每增加一个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/limits.conf 文件 以及 /etc/sysctl.conf 文件等来修改文件句柄数。

其次要考虑的是端口范围的*,操作系统上端口号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并发连接数,实际上单机并发连接数肯定要受硬件资源(内存)、网络资源(带宽)的*。

单台服务器最大支持多少连接数

https://blog.csdn.net/alpha_love/article/details/108351457

单机服务器支持千万级并发长连接的压力测试

https://blog.csdn.net/lijinqi1987/article/details/74545851

https://blog.csdn.net/wangshuminjava/article/details/80619190

HTTP长连接200万尝试及调优

https://www.cnblogs.com/zlingh/p/4814836.html

一次百万长连接压测 Nginx 内存溢出问题

https://blog.csdn.net/yangbaggio/article/details/107007627

大并发下TCP内存消耗优化小记(86万并发业务正常服务)

https://blog.51cto.com/benpaozhe/1752675

TCP长连接与短连接的区别

https://www.cnblogs.com/liuyong/archive/2011/07/01/2095487.html

Linux系统设置–ulimit

https://blog.haohtml.com/archives/9883

HTTP的长连接和短连接

https://www.cnblogs.com/cswuyg/p/3653263.html

网络连接中的长连接和短链接是什么意思?

https://www.hu.com/question/22677800

性能优化篇-使用长连接提升服务性能

https://zhuanlan.hu.com/p/118946284
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
硅胶与液态硅胶手机壳的区别 什么样的过敏会传染 过敏的原理是什么?为什么有的人过敏,有的人不过敏?谢谢! 过敏为什么会痒 评审报告需要注意什么 财政评审流程及注意事项 高效项目评审的6大注意事项 银行双录 什么意思 什么是银行双录 在异地哪些可公证 有人问你怎么才这么一点音浪,该怎么回答? 这么一点饭你还吃不完给句子换一种说法怎么说? 这么一点饭你还吃不完保持句意不变给句子换种说法怎么写? 成都蒲江有什么好吃好玩的 成都附近哪里可以下田摘西瓜呢? 成都猕猴桃采摘基地在哪里 广告设计师有几级,最高等级是几级? 求助各路高手,帮忙设计一个签名字体———陈旭 海地道路设计,字体太大,怎么调小。新手。如图。 一般道路设计说明采用什么字体? 谁能帮我设计十字绣字体“陈丹丹”“林学路”···谢谢了 皮蛋蔬菜瘦肉粥怎么做好吃 为什么中国的许多古建筑上都要雕上“龙”??? 中国有龙的花纹的古建筑有哪些 我看到有些古代建筑的牌匾上都有龙,那些龙有三个爪的,有四个爪的,还有五个爪的。请问那分别是代表着 裙子分类 装修房中的粉刷墙面 步骤 网上申请南宁居住证一直未审核 银行卡只进不出是什么意思 江苏省徐州市新沂市考驾照多少钱?? 想问下尿路感染和急性肾盂炎有什么区别啊? 何谓上尿路感染? 淘宝助理为什么在上传图片时候要有CSV文件才能上传,CSV文件从何而来? 少年科普报2022年第五期是什么时候 单口秀是什么 请问一个口加一个秀是什么字啊 口秀这个词是新词吗 易口秀是学什么 ‌笑‌果文‌化是专门做脱‌口秀的吗? 北京口才秀是一套()和()的特色课程? 全国基础养老金标准是多少 广州数全网络科技有限公司怎么样? 杭州全数科技有限公司怎么样? 科技之战的地图攻略 杭州全境数字科技有限公司怎么样? 现在工业数智化好像是大趋势了,请问全应科技好不好啊? 在百度找男朋友怎么找? 怀孕第一次去医院要做哪些检查,怀孕第一次到医院检查需要检查啥 哺乳期可以吃竹薯吗 直肠癌患者能吃什么