努力
加油

如何查看和提升阿里云ECS的并发连接上限?

查看和提升阿里云 ECS 的并发连接上限,核心在于理解一个概念:这个“上限”并不是由阿里云单方面锁死的固定值,而是由你的实例规格(Instance Type)、操作系统内核参数以及安全组/网络ACL策略共同决定的。

很多开发者容易陷入误区,认为买个大配置机器就自动无限并发。实际上,Linux 系统对文件描述符(File Descriptors)和 TCP 端口范围是有默认限制的。如果应用压测发现连接数上不去,通常是卡在了操作系统层面,而非云厂商的限制。

以下是从诊断现状到优化提升的完整实操指南。


一、 如何查看当前的并发连接能力?

你需要分三个维度来检查:实例规格理论上限、操作系统实际限制、当前实时状态。

1. 查看实例规格的理论上限

不同规格的 ECS 支持的包转发率(PPS)和最大网络连接数不同。这是硬件层面的硬指标。

  • 方法:登录阿里云控制台 -> 云服务器 ECS -> 实例详情 -> “配置信息”或“规格详情”。
  • 关键指标:关注 “最大网络连接数” 和 “内网收发包能力”。
    • 注意:通用型 g7/g6 系列与计算型 c7/c6 系列的数值差异巨大。例如,ecs.g7.large 可能支持几千个连接,而 ecs.c7.xlarge 则高得多。
    • 进阶:你可以查阅阿里云官方的《ECS 实例规格族介绍》文档,里面列出了每个规格族的详细网络性能指标。

2. 查看操作系统的文件描述符限制(最常见瓶颈)

Linux 中,每个网络连接都占用一个文件描述符(FD)。默认情况下,用户级进程通常只能打开 1024 个 FD,这直接限制了并发连接数。

  • 命令:

    # 查看当前用户的软限制和硬限制
    ulimit -n
    
    # 查看系统全局的文件描述符总数限制
    cat /proc/sys/fs/file-max

    如果 ulimit -n 显示 1024,那你的应用并发大概率被卡在 1024 左右。

3. 查看当前 TCP 连接状态

使用 ss 或 netstat 查看当前建立的连接数,判断是否接近上限。

  • 命令:

    # 统计 ESTABLISHED 状态的连接数
    ss -s | grep "TCP"
    
    # 或者更直观地看当前总连接数
    netstat -an | wc -l

二、 如何提升并发连接上限?

提升上限需要“软硬兼施”,即调整操作系统内核参数和优化云网络配置。

步骤 1:调高 Linux 文件描述符限制(必做)

这是提升单机并发最直接有效的手段。

  1. 修改用户限制(针对运行应用的特定用户,如 root 或 www):
    编辑 /etc/security/limits.conf,添加或修改以下行:

    * soft nofile 65535
    * hard nofile 65535

    解释:`代表所有用户,nofile是文件描述符,65535` 是推荐值。*

  2. 修改系统全局限制:
    编辑 /etc/sysctl.conf,添加:

    fs.file-max = 1000000

    然后执行 sysctl -p 生效。

  3. 重启服务或重新登录:
    修改 limits.conf 后,需要重新 SSH 登录或使用 ulimit -n 65535 临时生效,确保新会话继承新限制。

步骤 2:优化 TCP 内核参数(高阶优化)

对于高并发场景,默认的 TCP 栈配置可能不够激进,导致 TIME_WAIT 堆积或连接建立慢。

编辑 /etc/sysctl.conf,建议加入以下参数(根据业务类型微调):

# 开启 TCP 快速回收,减少 TIME_WAIT 时间
net.ipv4.tcp_tw_reuse = 1

# 增加本地端口范围,允许更多出站连接
net.ipv4.ip_local_port_range = 1024 65535

# 增加 TCP 接收/发送缓冲区大小
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

# 启用 TCP 拥塞控制算法优化 (如 bbr)
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

保存后执行 sysctl -p 生效。

注意:tcp_tw_reuse 在较新的内核版本中需谨慎使用,主要影响的是作为客户端发起大量短连接的场景。如果是服务端长连接为主,重点在于调整 somaxconn 和 backlog。

步骤 3:调整 Web 服务器/应用层配置

即使系统层面能支持 10 万连接,如果你的 Nginx、Tomcat 或 Java 应用配置了线程池上限为 200,那并发依然会被截断。

  • Nginx:检查 worker_processes auto; 和 worker_connections 10240;。确保 worker_connections 大于你期望的并发数。
  • Java/Tomcat:调整 server.xml 中的 maxThreads 和 acceptCount。
  • Go/Python:通常依赖 GIL 或事件循环,需关注 Goroutine 数量或 Event Loop 的处理能力。

步骤 4:检查云网络与安全组限制

虽然阿里云 ECS 本身不限制单个实例的连接数(只要资源够),但安全组和网络 ACL 可能会拦截异常流量。

  • 安全组规则:确保入方向规则没有设置错误的源 IP 限制或速率限制(Rate Limiting)。部分企业版安全组或 WAF 可能会有每秒新建连接数(CPS)的限制,如果触发限流,会表现为连接拒绝或超时。
  • 带宽瓶颈:如果带宽打满(如 100Mbps 跑满了),新的连接请求会因为队列积压而被丢弃。监控 ECS 的“出网带宽”和“入网带宽”指标,确保未触及带宽上限。

三、 避坑指南与最佳实践

  1. 不要盲目追求单实例极限:
    单机并发再高也有物理极限。当单台 ECS 达到规格上限时,正确的做法不是继续调优该机器,而是横向扩展。使用 SLB(负载均衡)+ 多台 ECS + Redis 集群架构,才是互联网高并发的标准解法。

  2. 区分“并发连接”与“吞吐量”:

    • 并发连接数:同时保持打开的 Socket 数量。
    • 吞吐量:单位时间内传输的数据量。
      有些场景(如 WebSocket 聊天室)连接数多但数据量小;有些场景(如视频流)连接数少但带宽压力大。优化手段完全不同。前者调 TCP 参数,后者调带宽和 CDN。
  3. 监控先行:
    在调整任何参数前,务必开启阿里云云的云监控,重点关注:

    • CPU 使用率
    • 内存使用率
    • 网络流入/流出带宽
    • 磁盘 IOPS
      防止因过度优化 TCP 参数导致 CPU 中断处理负担过重,反而降低整体性能。
  4. 合规性提醒:
    在进行压力测试或高并发调优时,请确保您的业务符合《网络安全法》及相关规定,避免成为 DDoS 攻击的跳板或肉鸡。阿里云会对异常流量进行风控检测,若检测到恶意扫描或攻击行为,可能会自动封禁实例。

总结

提升阿里云 ECS 并发连接上限,第一步永远是检查 ulimit -n 和 /proc/sys/fs/file-max。大多数情况下,将这两个值从默认的 1024 提升到 65535 或更高,就能解决 80% 的问题。剩下的 20% 取决于你的应用架构是否合理,以及是否需要通过负载均衡进行水平扩展。