加油
努力

如何排查阿里云服务器TCP连接数突然增加的问题?

排查阿里云服务器 TCP 连接数突然增加的问题,建议按以下步骤系统分析:

一、确认现象与范围

  1. 验证连接数是否真的异常

    # 查看当前总连接数(区分状态)
    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
  2. 对比历史数据

    • 检查 CloudMonitor 中 TCPConnectionCount 指标趋势
    • 确认是突增还是持续增长

二、定位高连接来源

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=1
net.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 并重启生效。


六、阿里云特有措施

  1. 安全组限制:仅放行必要端口和 IP
  2. DDoS 基础防护:在控制台开启免费防护(5Gbps 以下)
  3. WAF 接入:针对 HTTP/HTTPS 层攻击
  4. 云盾态势感知:查看实时威胁告警
  5. 流量分析:通过 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

通过以上步骤,通常可快速定位连接数激增的根本原因。如仍无法解决,建议提供具体输出(脱敏后)以便进一步分析。

云服务器