文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-12-03 14:03

关注

图片来自 Pexels

困惑很多人的并发问题

很多同学看到这个问题的第一反应是 65535。原因是:“听说端口号最多有 65535 个,那长连接就最多保持 65535 个了”。

是这样的吗?还有的人说:“应该受 TCP 连接里四元组的空间大小限制,算起来是 200 多万亿个!”

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

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

 

TCP 连接四元组是源 IP 地址、源端口、目的 IP 地址和目的端口。任意一个元素发生了改变,那么就代表的是一条完全不同的连接了。

拿我的 Nginx 举例,它的端口是固定使用 80。另外我的 IP 也是固定的,这样目的 IP 地址、目的端口都是固定的。剩下源 IP 地址、源端口是可变的。

所以理论上我的 Nginx 上最多可以建立 2 的 32 次方(ip 数)×2 的 16 次方(port 数)个连接。这是两百多万亿的一个大数字!

 

进程每打开一个文件(Linux 下一切皆文件,包括 Socket),都会消耗一定的内存资源。

如果有不怀好心的人启动一个进程来无限的创建和打开新的文件,会让服务器崩溃。

所以 Linux 系统出于安全角度的考虑,在多个位置都限制了可打开的文件描述符的数量,包括系统级、用户级、进程级。

这三个限制的含义和修改方式如下:

  1. 系统级:当前系统可打开的最大数量,通过 fs.file-max 参数可修改。
  2. 用户级:指定用户可打开的最大数量,修改 /etc/security/limits.conf。
  3. 进程级:单个进程可打开的最大数量,通过 fs.nr_open 参数可修改。

 

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

  1. $ sysctl -a | grep rmem 
  2. net.ipv4.tcp_rmem = 4096 87380 8388608 
  3. net.core.rmem_default = 212992 
  4. net.core.rmem_max = 8388608 

其中在 tcp_rmem 中的第一个值是为你们的 TCP 连接所需分配的最少字节数。该值默认是 4K,最大的话 8MB 之多。

也就是说你们有数据发送的时候我需要至少为对应的 Socket 再分配 4K 内存,甚至可能更大。

 

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

  1. $ sysctl -a | grep wmem 
  2. net.ipv4.tcp_wmem = 4096 65536 8388608 
  3. net.core.wmem_default = 212992 
  4. net.core.wmem_max = 8388608 

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

 

服务端百万连接达成记

 

准备啥呢,还记得前面说过 Linux 对最大文件对象数量有限制,所以要想完成这个实验,得在用户级、系统级、进程级等位置把这个上限加大。

我们实验目的是 100W,这里都设置成 110W,这个很重要!因为得保证做实验的时候其它基础命令例如 ps,vi 等是可用的。

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

  1. $ ss -n | grep ESTAB | wc -l   
  2. 1000024 

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

  1. $ cat /proc/meminfo 
  2. MemTotal:        3922956 kB 
  3. MemFree:           96652 kB 
  4. MemAvailable:       6448 kB 
  5. Buffers:           44396 kB 
  6. ...... 
  7. Slab:          3241244KB kB 

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

 

结语

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

作者:张彦飞

编辑:陶家龙

出处:转载自公众号开发内功修炼(ID:kfngxl)

来源:开发内功修炼内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯