返回列表 发布新帖
查看: 20|回复: 0

并发连接数异常飙升,一次排查实录

发表于 5 天前 | 查看全部 |阅读模式

这里或许是互联网从业者的最后一片净土,随客社区期待您的加入!

您需要 登录 才可以下载或查看,没有账号?立即注册

×
业务监控报警:网站响应时间超过 5 秒,CPU 使用率暴涨,负载接近 30,远超平时峰值(正常在 3 左右)。更奇怪的是,流量监控显示带宽并没有明显增长,但 并发连接数突然飙到平时的 5 倍。

第一步:确认是不是流量攻击
我第一反应是 DDoS 或 CC 攻击。
执行:
  1. netstat -ant | awk '{print $6}' | sort | uniq -c | sort -nr
复制代码
结果发现,大量连接处于 ESTABLISHED 状态,而且全部来自几个相同的 IP 段。进一步用:
  1. netstat -antp | grep ':80 ' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
复制代码
发现某个 IP 在短时间内建立了数千个活跃连接,而且都是正常 HTTP 请求,看起来不像 SYN flood 这种半连接攻击。

第二步:判断是业务异常还是恶意刷请求
我去 Nginx 日志里查:
  1. tail -n 20000 /var/log/nginx/access.log | awk '{print $1,$7}' | sort | uniq -c | sort -nr | head
复制代码
发现这些高并发 IP 请求的都是一个接口 /api/getData,而且带着不同的查询参数。
这说明——很可能是某个爬虫脚本在并发抓取接口。

第三步:确认服务器极限并发能力
执行:
  1. ulimit -n
复制代码
发现最大文件描述符限制是 1024(很低)。对于高并发场景,文件描述符限制过低会导致进程无法建立更多连接,从而引发“假死”。
我立刻调高:
  1. ulimit -n 65535
复制代码
并在 /etc/security/limits.conf 永久修改。

第四步:快速限流与封禁
为了先恢复业务,我在 Nginx 添加了简单的限速:
  1. limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;

  2. server {
  3.     location /api/ {
  4.         limit_req zone=req_limit burst=20 nodelay;
  5.     }
  6. }
复制代码
并用 firewalld 临时封掉可疑 IP:
  1. firewall-cmd --add-rich-rule='rule family=ipv4 source address=1.2.3.4 reject' --timeout=3600
复制代码

第五步:源头定位
事后分析了日志,确认这是合作方接口被误用,一个外部脚本在 1 秒内并发发起上千请求,导致并发数瞬间冲到极限。
最后优化方案:
1. API 增加 鉴权 和 签名校验
2. 接口加缓存,避免每次都直连数据库
3. Nginx + 应用层多级限流
4. 提高系统 ulimit 和 Nginx worker_connections

总结
这次事故让我意识到:
并发数异常飙升,不一定是攻击,可能是业务调用失控
系统文件描述符、Nginx 配置、应用限流必须提前优化
带宽监控不能替代并发监控,后者才是很多“卡死”问题的根源

经验公式:
并发连接数 ≈ worker_processes * worker_connections(Nginx 理论值)
记得给系统和应用留足上限,否则你会发现——服务器挂了,带宽还一片风平浪静。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2001-2025 Suike Tech All Rights Reserved. 随客交流社区 (备案号:津ICP备19010126号) |Processed in 0.105674 second(s), 8 queries , Gzip On, MemCached On.
关灯 在本版发帖返回顶部
快速回复 返回顶部 返回列表