0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一台Linux服务器最多能支撑多少个TCP连接?

Linux爱好者 来源:开发内功修炼 作者:张彦飞 2020-12-29 11:13 次阅读

【导读】:单台 Linux 服务器可以支撑多少个 TCP 连接?关于这个问题,我想很多客户端的同学都不怎么了解,甚至于很多服务器开发也没有特意的关注。

那么这个承载数到底取决了什么,是端口数量,还是内存大小,亦或者是可创建文件句柄数量?让我们一起来了解下吧。

困惑很多人的并发问题

网络开发中,我发现有很多同学对一个基础问题始终是没有彻底搞明白。那就是一台服务器最大究竟能支持多少个网络连接?我想我有必要单独发一篇文章来好好说一下这个问题。

很多同学看到这个问题的第一反应是65535。原因是:“听说端口号最多有65535个,那长连接就最多保持65535个了”。是这样的吗?还有的人说:“应该受TCP连接里四元组的空间大小限制,算起来是200多万亿个!”

如果你对这个问题也是理解的不够彻底,那么今天讲个故事讲给你听!

一次关于服务器端并发的聊天

793b0a68-4966-11eb-8b86-12bb97331649.png

"TCP连接四元组是源IP地址、源端口、目的IP地址和目的端口。任意一个元素发生了改变,那么就代表的是一条完全不同的连接了。拿我的Nginx举例,它的端口是固定使用80。另外我的IP也是固定的,这样目的IP地址、目的端口都是固定的。剩下源IP地址、源端口是可变的。所以理论上我的Nginx上最多可以建立2的32次方(ip数)×2的16次方(port数)个连接。这是两百多万亿的一个大数字!!"

7968bf26-4966-11eb-8b86-12bb97331649.png

"进程每打开一个文件(linux下一切皆文件,包括socket),都会消耗一定的内存资源。如果有不怀好心的人启动一个进程来无限的创建和打开新的文件,会让服务器崩溃。所以linux系统出于安全角度的考虑,在多个位置都限制了可打开的文件描述符的数量,包括系统级、用户级、进程级。这三个限制的含义和修改方式如下:"

系统级:当前系统可打开的最大数量,通过fs.file-max参数可修改

用户级:指定用户可打开的最大数量,修改/etc/security/limits.conf

进程级:单个进程可打开的最大数量,通过fs.nr_open参数可修改

799af0c2-4966-11eb-8b86-12bb97331649.png

"我的接收缓存区大小是可以配置的,通过sysctl命令就可以查看。"

$sysctl-a|greprmem net.ipv4.tcp_rmem=4096873808388608 net.core.rmem_default=212992 net.core.rmem_max=8388608

"其中在tcp_rmem"中的第一个值是为你们的TCP连接所需分配的最少字节数。该值默认是4K,最大的话8MB之多。也就是说你们有数据发送的时候我需要至少为对应的socket再分配4K内存,甚至可能更大。"

79dada84-4966-11eb-8b86-12bb97331649.png

"TCP分配发送缓存区的大小受参数net.ipv4.tcp_wmem配置影响。"

$sysctl-a|grepwmem net.ipv4.tcp_wmem=4096655368388608 net.core.wmem_default=212992 net.core.wmem_max=8388608

"在net.ipv4.tcp_wmem"中的第一个值是发送缓存区的最小值,默认也是4K。当然了如果数据很大的话,该缓存区实际分配的也会比默认值大。"

7a0030f4-4966-11eb-8b86-12bb97331649.png

服务端百万连接达成记

7a1500ce-4966-11eb-8b86-12bb97331649.png

“准备啥呢,还记得前面说过Linux对最大文件对象数量有限制,所以要想完成这个实验,得在用户级、系统级、进程级等位置把这个上限加大。我们实验目的是100W,这里都设置成110W,这个很重要!因为得保证做实验的时候其它基础命令例如ps,vi等是可用的。“

7a44dfba-4966-11eb-8b86-12bb97331649.png

7a5f307c-4966-11eb-8b86-12bb97331649.png

活动连接数量确实达到了100W:

$ss-n|grepESTAB|wc-l 1000024

当前机器内存总共是3.9GB,其中内核Slab占用了3.2GB之多。MemFree和Buffers加起来也只剩下100多MB了:

$cat/proc/meminfo MemTotal:3922956kB MemFree:96652kB MemAvailable:6448kB Buffers:44396kB ...... Slab:3241244KBkB

通过slabtop命令可以查看到densty、flip、sock_inode_cache、TCP四个内核对象都分别有100W个:

7ae92afc-4966-11eb-8b86-12bb97331649.png

结语

互联网后端的业务特点之一就是高并发. 但是一台服务器最大究竟能支持多少个TCP连接,这个问题似乎却又在困惑着很多同学。希望今天过后,你能够将这个问题踩在脚下摩擦!

原文标题:漫画:一台 Linux 服务器最多能支撑多少个 TCP 连接

文章出处:【微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 互联网
    +关注

    关注

    54

    文章

    10892

    浏览量

    100694
  • Linux
    +关注

    关注

    87

    文章

    10981

    浏览量

    206689
  • 服务器
    +关注

    关注

    12

    文章

    8090

    浏览量

    82434

原文标题:漫画:一台 Linux 服务器最多能支撑多少个 TCP 连接

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32EB55CGU6蓝牙openthread协议的路由设备最多可以带多少个低功耗设备?

    STM32EB55CGU6蓝牙openthread协议中的路由设备最多可以带多少个低功耗设备?
    发表于 03-13 08:18

    cybt343026-01最多能scan到多少个

    我想问下cybt343026-01的模块,scan的话,最多能scan到多少个
    发表于 03-01 06:44

    linux服务器和windows服务器

    较为熟悉,需要高性能和稳定性,并且希望能够进行自定义配置和更好的安全性,那 么Linux服务器不错的选择。 而如果你对服务器操作系统不
    发表于 02-22 15:46

    一台服务器,最大支持的TCP连接数是多少?

    很多同学第一反应就是端口的限制,端口号最多是 65536个,那就最多只能支持 65536 条 TCP 连接
    的头像 发表于 01-19 18:16 2459次阅读
    <b class='flag-5'>一台服务器</b>,最大支持的<b class='flag-5'>TCP</b><b class='flag-5'>连接</b>数是多少?

    v90伺服电机最多能定位多少个位置点啊?

    v90伺服电机最多能定位多少个位置点啊?
    发表于 01-09 10:33

    LTC6804最多能支持多少个电池串联?

    关于LTC6804,技术文档里面提到堆叠式架构能支持几百电池,请问具体最多能支持多少个电池串联?谢谢!
    发表于 01-05 10:19

    ADBMS1818最多能够驱动多少个热敏电阻?

    ADBMS1818芯片VREF2缓冲第二基准电压,用于驱动多个10 kΩ热敏电阻,最多能够驱动多少个热敏电阻?
    发表于 01-03 09:31

    服务器怎么连接到设备,MQTT和TCP的通讯方式有什么不同?

    采用ESP8266进行开发,服务器怎么连接到设备的,MQTT 和TCP的通讯方式有什么不用呢
    发表于 11-02 08:34

    一台客户端机器最多能发起多少条TCP连接

    服务器的开销大头往往并不是连接本身,而是每条连接上的数据收发,以及请求业务逻辑处理!!!
    的头像 发表于 10-30 15:02 441次阅读

    8266STA模式连接不上TCP服务器怎么解决?

    8266STA模式连接不上TCP服务器
    发表于 10-17 07:25

    FATFS最多可以挂载多少个盘符?

    FATFS最多可以挂载多少个盘符
    发表于 09-27 07:16

    HTTP服务器使用uIP TCP/ IP堆栈的示例

    NuMaker 板, 运行此 HTTP 服务器代码 。http://192.168.08.2。。网络浏览连接后,应显示包含单按钮的简
    发表于 08-22 07:07

    ESP8266 AT+CIPSTART无法让服务器关闭的原因?

    程序和服务器应用程序均从同一台 W10 PC 执行。 我可以毫无问题地打开到服务器 IP 和端口的 UDP 并执行发送和接收,但服务器没有响应。端口保持打开状态,直到我关闭它,但
    发表于 05-16 07:35

    无法在双mde中连接TCP服务器(Station + SoftAP)?

    当我通过AT+CIPSERVER启动TCP服务器时,芯片运行在AP+Station双模时,如何知道它监听的是哪个接口?在 SoftAP 模式下,我可以连接到 192.168.4.1。但是当我还启用站
    发表于 05-15 08:33

    AT+CIPRECVMODE=0在主动模式下无法从服务器接收TCP数据怎么解决?

    在“ARRIS”和其他些路由中,我们面临这个问题。 ① 在设置 AT+CIPRECVMODE=0 (Active mode)中,我们无法从服务器接收 TCP 数据。 ② 在同
    发表于 04-24 06:18