0
  • No products in the cart.
CartTotal:¥0.00
  • 云技术
    • 云服务器运维
    • 云数据库技术
    • 云存储技术
    • 云安全服务
    • 云网络服务
  • 云慧采
    • 云服务器
    • 云数据库
    • 云存储
    • 云安全
    • 网络与CDN
    • 视频服务
    • 大数据
    • 物联网
    • 人工智能
    • 开发与运维
    • 企业应用
  • 云服务
    • 阿里云技术支持
    • 华为云技术支持
    • 腾讯云技术支持
    • 木马病毒查杀
    • 渗透测试服务
    • 服务器迁移服务
    • 高并发业务保障服务
    • 数据库运维/专家服务
  • 客户案例
  • 云技术
    • 云服务器运维
    • 云数据库技术
    • 云存储技术
    • 云安全服务
    • 云网络服务
  • 云慧采
    • 云服务器
    • 云数据库
    • 云存储
    • 云安全
    • 网络与CDN
    • 视频服务
    • 大数据
    • 物联网
    • 人工智能
    • 开发与运维
    • 企业应用
  • 云服务
    • 阿里云技术支持
    • 华为云技术支持
    • 腾讯云技术支持
    • 木马病毒查杀
    • 渗透测试服务
    • 服务器迁移服务
    • 高并发业务保障服务
    • 数据库运维/专家服务
  • 客户案例

小知识|一台Linux服务器最多能支持多少个网络连接?

困惑很多人的并发问题

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

很多同学看到这个问题的第一反应是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 rmem
net.ipv4.tcp_rmem = 4096 87380 8388608
net.core.rmem_default = 212992
net.core.rmem_max = 8388608

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

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

$ sysctl -a | grep wmem
net.ipv4.tcp_wmem = 4096 65536 8388608
net.core.wmem_default = 212992
net.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/meminfo
MemTotal:        3922956 kB
MemFree:           96652 kB
MemAvailable:       6448 kB
Buffers:           44396 kB
......
Slab:          3241244KB kB

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

结语

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

前往购买:高并发业务保障服务
(集群搭建、性能调优、压力测试、安全防护等)

以上内容对您有帮助吗?如有问题,可联系在线工程师为您提供技术支持

Yes  No
相关内容
  • 快照服务,全方位保护服务器数据安全
  • 用阿里云日志服务快速建立服务器监控系统
  • 云服务器安全组设置方法
  • 服务器未设置自动快照,中勒索病毒损失惨重
  • 云服务器镜像是什么,有什么用?
  • 深入了解服务器的TIME_WAIT和CLOSE_WAIT状态
产品
  • SSL证书5折起(DV,OV,EV,多域名,通配符,免费SSL证书安装配置) ¥2.00 ¥1.00
  • 漏洞扫描服务 ¥0.00 – ¥1,000.00
  • 阿里云云安全中心(服务器安全防护漏洞自动修复木马病毒查杀) ¥270.00 – ¥1,148.00
  • 阿里云web应用防火墙(WAF)防CC防SQL注入防网页篡改木马后门 ¥149.00 – ¥227,920.00
  • 阿里云文件存储NAS ¥157.00 – ¥840.00
云服务器运维
  • 小知识|一台Linux服务器最多能支持多少个网络连接?
  • 快照服务,全方位保护服务器数据安全
  • 用阿里云日志服务快速建立服务器监控系统
  • 云服务器安全组设置方法
  • 服务器未设置自动快照,中勒索病毒损失惨重
  • 云服务器镜像是什么,有什么用?
View All 20  
热门内容
  • 阿里云混合云解决方案
  • 数据库上云迁移方案
  • 网站运维服务都包含哪些?
  • 三级等保测评咨询实施服务
  • 性能测试/压力测试指标参考标准
服务分类
  • 物联网技术
  • 云服务器运维
  • 网站运维
  • 云数据库技术
  • 云存储技术
  • 云安全服务
  • 云网络服务
  • 大数据和人工智能
  • CDN与边缘计算
  • 弹性计算
  • 优惠活动
  • 云架构设计优化
  • 迁云实施服务
  • 容灾备份服务
  • 云上护航
  • Linux系统运维
  • 解决方案咨询与实施
  • 视频云技术
  • 混合云与专有云
  • 企业应用
专题
AnalyticDB CDN技术 ClickHouse数据库 PolarDB PostgreSQL数据库 SD-WAN serverless SSL证书 web应用防火墙 云堡垒机 云存储网关 云数据库MongoDB 云数据库RDSmysql 云数据库redis 云服务器 云防火墙 全局流量管理 全球加速 号码隐私保护 多模数据库Lindorm 安全加固 实人认证 容器服务 对象存储OSS 弹性伸缩 性能测试 数据仓库 数据库备份DBS 数据库审计 数据库自治服务DAS 数据湖 文件存储NAS 日志服务 服务网格 混合云存储 物联网安全 等保测评 表格存储Tablestore 运维技术 阿里云优惠
  • 阿里云代理商
  • 腾讯云代理商
  • 华为云代理商
  • 等保测评
  • 数据库备份
  • 堡垒机
  • 阿里云邮箱
  • 华为云服务
  • APM
  • serverless
  • SD-WAN
  • PolarDB
  • 阿里云数据仓库
  • 数据湖
  • 腾讯云服务器
  • 智慧党建
  • 蓝凌OA
  • 费用管理软件
  • 智慧校园
  • 混合云
  • 阿里云混合云
  • © 2020 云技术|云慧采. All Rights Reserved 服务电话13121395187