在阿里云 ECS 上查看和提升连接数限制,其实是一个“分层管理”的过程。很多人容易把操作系统内核参数、应用层配置和云平台网络策略混为一谈。要真正解决高并发下的连接瓶颈,必须从下往上逐层排查和优化。
以下我将从 OS 内核层面、云产品层面 以及 常见误区 三个维度,给你一套完整的实操指南。
一、 第一层:操作系统内核限制(最基础也最容易被忽视)
Linux 系统默认对单个进程或整个系统的文件描述符(File Descriptor, FD)是有上限的。TCP 连接本质上就是文件描述符。如果这里没调大,你的 Web 服务器(Nginx/Java/Go)还没开始跑业务,就会报 Too many open files。
1. 查看当前限制
使用 ulimit 命令查看当前 shell 会话的限制:
ulimit -n
# 通常默认是 1024
查看系统全局最大文件描述符限制:
cat /proc/sys/fs/file-max
2. 提升限制(永久生效)
修改 /etc/security/limits.conf 文件:
* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535
注意:修改后需要重新登录 SSH 才能生效。如果是 systemd 管理的服务(如 Nginx),还需要检查 service 文件中的
LimitNOFILE配置,或者直接通过 systemctl edit 修改。
3. 调整 TCP 端口范围(关键!)
很多高并发场景报错 Cannot assign requested address,是因为本地临时端口用完了。Linux 默认的临时端口范围很小(通常是 32768-60999)。
查看当前范围:
cat /proc/sys/net/ipv4/ip_local_port_range
提升范围(例如扩展到 10000-65535):
echo "10000 65535" > /proc/sys/net/ipv4/ip_local_port_range
# 写入配置文件 /etc/sysctl.conf 以持久化
net.ipv4.ip_local_port_range = 10000 65535
sysctl -p
4. 优化 TCP 连接回收参数
在高并发短连接场景下,TIME_WAIT 状态会堆积占满端口。建议调整以下内核参数:
# /etc/sysctl.conf
# 允许重用 TIME-WAIT sockets
net.ipv4.tcp_tw_reuse = 1
# 缩短 TIME-WAIT 等待时间(秒)
net.ipv4.tcp_fin_timeout = 30
# 启用快速回收
net.ipv4.tcp_tw_recycle = 0
# 注意:tcp_tw_recycle 在 NAT 环境下可能导致问题,现代 Linux 内核建议设为 0,主要靠 tcp_tw_reuse 和扩大端口范围来解决
二、 第二层:阿里云云产品层面的限制
这是用户最容易困惑的地方。阿里云 ECS 本身没有所谓的“全局连接数上限”,但有几个相关的云产品指标需要注意:
1. 安全组(Security Group)
- 误区:安全组不限制连接数。
- 事实:安全组只过滤数据包(基于 IP、端口、协议)。它不会因为连接数多了就丢弃包。所以不用担心安全组限制了并发连接。
2. 弹性公网 IP (EIP) 与带宽
- 带宽瓶颈:虽然不限制连接数,但如果带宽打满(例如 10Mbps 小水管),大量连接同时传输数据会导致拥塞,表现为连接超时或丢包。
- QPS 限制:某些低配 EIP 或特定计费模式下,可能会有每秒新建连接数(CPS)的隐性限制,但这通常极高,普通业务不会触及。除非你做了 DDoS 防护或购买了专门的抗 D 服务,否则一般不用考虑这个。
3. SLB (负载均衡) —— 如果你用了 SLB
这是真正的“连接数限制”高发区!
如果你前端挂了阿里云 SLB(经典负载均衡 CLB 或应用型负载均衡 ALB),那么连接数限制是在 SLB 实例上设置的,而不是 ECS。
- 如何查看:登录 SLB 控制台 -> 监听页面 -> 查看“健康检查”或“连接数”监控图表。
- 如何提升:
- 升级规格:SLB 的连接数能力与其规格(Instance Type)强相关。例如,入门型可能只有几千 QPS/连接,企业型则支持数十万。
- 调整参数:在监听配置中,可以调整“空闲超时时间”、“最大连接数”等参数(具体取决于 CLB 还是 ALB 的版本)。
- 扩容:最直接的方式是购买更高规格的 SLB 实例,或者增加后端 ECS 的数量来分摊压力。
4. 云防火墙 / 云盾
- 如果你开启了云防火墙,可能会设置“每秒新建连接数”阈值。超过阈值会拦截。需要在云防火墙控制台中调整策略白名单或提高阈值。
三、 第三层:应用层限制
即使 OS 和云网络都通了,你的应用代码也可能有限制。
- Nginx:检查
worker_connections。默认通常是 1024。如果你的 CPU 核数是 4,理论上最大连接数 =worker_processes * worker_connections。需适当调大。 - Java (Tomcat/Jetty):检查
server.max-threads或 connector 的maxConnections。 - Go/Python:通常由 GIL 或线程池决定,需根据框架文档调整 Worker 数量。
四、 实战排查步骤总结
当你发现“连接不上”或“速度慢”时,按以下顺序排查:
-
看监控:
- 登录阿里云 ECS 控制台,查看 CPU 使用率、内存使用率、网络流入/流出带宽。
- 如果带宽打满,优先升级带宽或优化内容分发(CDN)。
- 如果 CPU 爆满,说明计算瓶颈,需要水平扩展 ECS 实例。
-
查日志:
- 查看应用日志是否有
Too many open files、Connection refused、Connection reset by peer。 - 这些错误直接指向 OS 内核参数或应用配置。
- 查看应用日志是否有
-
测连通性:
- 使用
telnet <ECS内网IP> <端口>测试内网连通。 - 使用
curl -v http://<ECS公网IP>测试网络连通。 - 如果内网通但网络不通,检查安全组和路由表。
- 使用
-
确认是否经过 SLB:
- 如果架构中有 SLB,务必去 SLB 控制台检查其规格是否匹配当前流量峰值。这是最常见的“伪瓶颈”。
五、 重要提醒:合规与安全
- 不要盲目追求无限连接:连接数越多,内存占用越高(每个 TCP 连接在内核中都需要维护 PCB 结构体)。一台 4G 内存的 ECS,轻松支撑数万并发,但很难支撑百万级而不崩溃。合理设计异步非阻塞架构(如 Nginx + Node.js/Go)比堆硬件更有效。
- 安全防护:高并发往往是 DDoS 攻击的前兆。确保开启了阿里云的云盾基础防护,并监控异常流量。不要为了性能关闭必要的访问控制策略。
- 成本意识:提升连接数往往意味着需要更大规格的 ECS 或 SLB,这会直接增加账单。请结合业务实际 QPS 进行选型,避免过度配置。
一句话总结:
先调大 Linux 的 nofile 和 ip_local_port_range,再检查应用层的 Worker 配置,最后确认云产品(特别是 SLB)的规格是否成为瓶颈。阿里云 ECS 本身不设硬性的连接数上限,瓶颈通常在 OS 内核和应用架构。
云技术博客