排查阿里云服务器 TCP 连接数突然增加的问题,建议按以下步骤系统分析:
一、确认现象与范围
-
验证连接数是否真的异常
# 查看当前总连接数(区分状态) netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' # 或使用 ss(推荐,性能更好) ss -s # 查看 ESTABLISHED 连接数 ss -tn state established | wc -l -
对比历史数据
- 检查 CloudMonitor 中
TCPConnectionCount指标趋势 - 确认是突增还是持续增长
- 检查 CloudMonitor 中
二、定位高连接来源
1. 按进程统计连接
# 找出占用连接最多的进程
ss -tnp | awk '{print $6}' | sort | uniq -c | sort -rn | head -20
# 或用 lsof(需 root)
lsof -i -P -n | grep LISTEN | awk '{print $9}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20
2. 按远程 IP 分析
# 统计外部 IP 连接分布
ss -tn | awk 'NR>1 {print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -30
3. 识别异常模式
- 大量同一 IP:可能是攻击或爬虫
- 大量短连接:可能是配置问题或 DDoS
- TIME_WAIT 过多:可能服务端频繁重启或客户端未复用连接
三、深入分析可疑进程
对疑似进程进行详细检查:
# 替换 <PID> 为实际进程 ID
ls -l /proc/<PID>/fd/ | wc -l # 查看文件描述符数
cat /proc/<PID>/net/tcp # 查看该进程的 TCP 表项
strace -e trace=network -p <PID> # 追踪网络调用(谨慎使用)
四、常见原因及应对策略
| 现象特征 | 可能原因 | 解决方案 |
|---|---|---|
| 单 IP 大量连接 | CC 攻击/扫描 | 在安全组/SLB 限流,或 WAF 拦截 |
| 所有端口都开放且连接多 | 服务配置错误 | 检查 listen 配置,限制最大连接数 |
| TIME_WAIT 占比高 (>80%) | 短连接未复用 | 调整内核参数:net.ipv4.tcp_tw_reuse=1net.ipv4.tcp_fin_timeout=30 |
| 特定应用(如 Nginx/MySQL)连接激增 | 业务逻辑问题 | 检查应用日志,优化连接池配置 |
| 无明确源 IP 的 SYN 洪水 | SYN Flood 攻击 | 开启阿里云 DDoS 防护,启用 SYN Cookie |
五、系统级调优(临时缓解)
# 临时调整内核参数(生产环境请评估后生效)
sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.tcp_max_syn_backlog=65535
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_fin_timeout=30
sysctl -w net.ipv4.ip_local_port_range="1024 65535"
⚠️ 注意:上述参数修改后建议写入
/etc/sysctl.conf并重启生效。
六、阿里云特有措施
- 安全组限制:仅放行必要端口和 IP
- DDoS 基础防护:在控制台开启免费防护(5Gbps 以下)
- WAF 接入:针对 HTTP/HTTPS 层攻击
- 云盾态势感知:查看实时威胁告警
- 流量分析:通过 VPC 流日志定位异常流量源
七、后续监控建议
- 配置 CloudMonitor 报警规则:当
TCPConnectionCount超过阈值时触发 - 定期巡检脚本:
# 示例:每小时记录连接数 while true; do echo "$(date '+%Y-%m-%d %H:%M') $(ss -s | grep 'ESTAB')" >> /var/log/tcp_conn.log sleep 3600 done
通过以上步骤,通常可快速定位连接数激增的根本原因。如仍无法解决,建议提供具体输出(脱敏后)以便进一步分析。
云小栈