作者 | 张彦飞allen

来源 | 开发内功修炼(ID:kfngxl)

困惑很多人的并发问题

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

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

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

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

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

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

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

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

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

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

$ sysctl -a | grep rmemnet.ipv4.tcp_rmem = 4096 87380 8388608net.core.rmem_default = 212992net.core.rmem_max = 8388608

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

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

$ sysctl -a | grep wmemnet.ipv4.tcp_wmem = 4096 65536 8388608net.core.wmem_default = 212992net.core.wmem_max = 8388608

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

服务端百万连接达成记

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

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

$ ss -n | grep ESTAB | wc -l
1000024

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

$ cat /proc/meminfoMemTotal:        3922956 kBMemFree:           96652 kBMemAvailable:       6448 kBBuffers:           44396 kB......Slab:          3241244KB kB

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

结语

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

学习是一件痛苦的事情,尤其咱们号里很多读者朋友都是工作满一天了再来看我的技术号的文章的。我一直都在琢磨到底怎么样组织技术内容形式,能让大家理解起来更能省一点脑细胞呢。这篇服务器的最大并发数的文章是早就想发的,但是写了两三个版本都不满意。今天终于想出了一种让大家更容易理解的方式,算过了自己这关了。

改天再讲客户端,敬请期待!!

生于2001年的《程序员》曾陪伴了无数开发者成长,影响了一代又一代的中国技术人。时隔20年,《新程序员》带着全球技术大师深邃思考、优秀开发者技术创造等深度内容回来了!同时将全方位为所有开发者呈现国内外核心技术生态体系全景图。扫描下方小程序码即可立即订阅!

漫画 | 一台 Linux 服务器最多能支撑多少个 TCP 连接?相关推荐

  1. mysql最多多少个索引_漫画 | 一台Linux服务器最多能支撑多少个TCP连接?

    来自公众号:开发内功修炼 困惑很多人的并发问题 在网络开发中,我发现有很多同学对一个基础问题始终是没有彻底搞明白.那就是一台服务器最大究竟能支持多少个网络连接?我想我有必要单独发一篇文章来好好说一下这 ...

  2. 服务器tcp连接占满_漫画 | 一台Linux服务器最多能支撑多少个TCP连接?

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

  3. linux 清tcp缓存 命令_漫画 | 一台Linux服务器最多能支撑多少个TCP连接?

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

  4. 一台服务器最多能创建多少个 TCP 连接?

    目录 1.TCP连接的创建 2.端口号的限制 3.文件描述符的限制 4.线程数量的限制 5.内存的限制 6.CPU的限制 7.总结 8.后记 原文链接:https://mp.weixin.qq.com ...

  5. 一台服务器最大能支持多少条TCP连接

    一.一台服务器最大能打开的文件数 1.限制参数 我们知道在Linux中一切皆文件,那么一台服务器最大能打开多少个文件呢?Linux上能打开的最大文件数量受三个参数影响,分别是: fs.file-max ...

  6. 面试官:一台服务器最大能支持多少条 TCP 连接?问倒一大片。。。

    点关注公众号,回复"1024"获取2TB学习资源! 之前有一位读者向民工哥诉苦,有次面试,好不容易(今年行情大家都懂的)熬到到技术终面,谁知道面试官突然放个大招问他:一台服务器最大 ...

  7. 一台服务器最大能支持多少条 TCP 连接?问倒一大片。。。

    一台服务器最大能打开的文件数 限制参数 我们知道在Linux中一切皆文件,那么一台服务器最大能打开多少个文件呢?Linux上能打开的最大文件数量受三个参数影响,分别是: fs.file-max (系统 ...

  8. 面试官:一台服务器最大能支持多少条 TCP 连接?问倒一大片。

    程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 10 分钟. 来自:juejin.cn/post/7162824884597293086 一台服务器最大能打开的文件数 调整服 ...

  9. 一台服务器最大能支持多少条 TCP 连接?面试官的话问倒一大片。。。

    一台服务器最大能打开的文件数 调整服务器能打开的最大文件数示例 一台服务器最大能支持多少连接 一台客户端机器最多能发起多少条连接 其他 相关实际问题 之前有一位读者向作者诉苦,有次面试,好不容易(今年 ...

最新文章

  1. CentOS 6.8 安装 RabbitMQ
  2. Myeclipse8.5配置本地tomcat
  3. js高级编程中命名空间的两种用法
  4. 我的电脑不联网,很安全,黑客:你还有风扇呢。。。
  5. mysql+性能优化+命令_MySQL 性能优化及常用命令
  6. RK3399Pro Android Rock-X 人工智能开发系列(2)
  7. knx智能照明控制系统电路图_智能照明控制系统应用效果
  8. 华为SecoClient报错[SVN Adapter V1.0感叹号]“接受返回码超时”
  9. H.266 JEM编码块结构:四叉树+二叉树QTBT
  10. 【黑苹果镜像】macOS Monterey 12.3正式版 (21E230) With OpenCore 0.7.9 and Clover 5144 and winPE原版镜像
  11. “数”峰亮剑,优炫数据库助力国产数据库算法对抗赛成功举办
  12. Windows驱动编程基础教程
  13. 使用scrapy简单爬取网易新闻
  14. 后台管理系统-登录页面
  15. 我在Flutter的前24小时
  16. 牛客小白月赛5 I.区间 (interval)
  17. ABC247ABCD
  18. 2021最新版万年历小程序搭建教程
  19. 计算机组成原理13-定点数的移位、加法与减法运算
  20. c#: NetTopologySuite凹凸多边形计算

热门文章

  1. 谷歌新一轮裁员,云计算部门 50 人首当其冲
  2. GitHub 上有个沙雕开发者,做了款斗图工具后火了...
  3. Meta首个元宇宙平台Horizon被吐槽,用户只配有半截身子!
  4. SAP QM创建一个包含Multiple Specification的检验计划
  5. SAP MM在ML81N事务代码界面报错- Customizing incorrectly maintained –之对策
  6. SAP MM 采购附加费在收货以及发票过账时候的会计分录
  7. 全球最大智能模型“悟道”首次落地:数字人+终端AI助手,支持NVIDIA GTX单卡机运行百亿大模型
  8. SAP PP使用ECR去修改Recipe主数据,报错:Generation not supported for change object
  9. SAP PM 入门系列15 - IW41 维护订单确认
  10. ICLR 2020 | ReClor: 一个需要逻辑推理的阅读理解数据集