游戏卡顿掉线是被攻击了吗?五分钟判断法
玩家在群里刷"卡了""掉线了",你第一反应是"又被打了"。但实际情况里,至少一半的卡顿不是攻击。
为什么必须先分清:如果按攻击去处置,你会去买高防、换线路、加带宽——花了钱问题还在。反过来,真被攻击时去查代码,等查完玩家已经走光了。
四类原因的典型症状
| 原因 | 典型症状 | 关键特征 |
|---|---|---|
| DDoS 流量攻击 | 全体玩家同时掉线,登录都进不去,服务器 SSH 也连不上 | 突然发生、影响所有人、带宽曲线瞬间打满 |
| CC 攻击 | 能登录但极慢,操作延迟高,CPU 或数据库连接数爆满 | 流量看着正常、CPU 却 100%、日志里同一接口被刷 |
| 程序问题 | 特定操作卡(比如打开背包、跨地图),部分玩家正常 | 能稳定复现、和玩家数量无关、重启后暂时好转 |
| 网络/线路问题 | 某地区玩家集体卡,其他地区正常 | 按地域聚集、丢包率上升、traceroute 有异常节点 |
| 配置不足 | 人少时正常,人多就卡,规律性明显 | 和在线人数强相关、凌晨流畅、晚上卡 |
五分钟判断法
第一步:看带宽曲线(30 秒)
登录云厂商控制台,看服务器的出带宽监控。
- 曲线瞬间拉成一条直线顶到上限 → 流量型 DDoS,几乎可以确定
- 带宽正常,但 CPU 满了 → CC 攻击或程序问题
- 带宽和 CPU 都不高,但玩家说卡 → 网络线路问题,或者客户端问题
- 带宽随在线人数缓慢爬升 → 配置不足
这条最快。很多情况下看一眼带宽曲线就能定性,不用往下查。
第二步:看能不能连上(1 分钟)
# 从本地 ping 服务器
ping -c 20 你的服务器IP
# 测试业务端口是否通
telnet 你的服务器IP 你的游戏端口
# 看丢包和延迟
mtr -r -c 50 你的服务器IP
判断标准:
- ping 不通、端口连不上 → 大概率流量攻击,或者服务器已经挂了
- ping 通但丢包 30% 以上 → 线路问题,或遭受小流量攻击
- ping 正常、延迟稳定 → 网络层没问题,往应用层查
第三步:看连接数和进程(2 分钟)
# 看 TCP 连接状态分布
netstat -an | awk '/^tcp/ {print $6}' | sort | uniq -c | sort -rn
# 看当前连接数最多的 IP
netstat -an | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10
# 看 CPU 占用最高的进程
top -b -n 1 | head -20
攻击特征:
SYN_RECV数量异常多(几百上千)→ SYN Flood- 某个 IP 有几百个
ESTABLISHED→ CC 攻击 - CPU 被
php-fpm、java或数据库进程吃满 → 应用层被打
第四步:看日志有没有被刷(1.5 分钟)
# Nginx:访问量最高的 20 个 IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20
# 被请求最多的路径
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
# 统计每秒请求数(判断是否异常)
awk '{print $4}' /var/log/nginx/access.log | cut -c14-21 | uniq -c | tail -20
正常游戏站的登录接口,每秒可能几十次。如果某秒出现几千次,且来源 IP 分散,就是 CC。
按结论分别处置
确认是 DDoS
- 立刻联系机房或云厂商,说明被攻击,请求牵引清洗
- 如果源站 IP 已暴露,考虑换 IP(但只是临时缓解)
- 中长期接入游戏盾这类隐藏源站 IP 的方案
详细处置流程见 游戏服务器被攻击怎么解决。
确认是 CC
- 先在 Nginx 层加限速,挡住最粗暴的那批
- 把被刷的接口加验证(登录加图形验证码、频繁操作加冷却)
- 如果已经分布式,本地限速挡不住,需要节点层清洗
配置方法见 CC 攻击怎么防御。
不是攻击
这几种情况按顺序排查:
- 程序问题:开慢查询日志,找出执行时间超过 1 秒的 SQL;看是否有 N+1 查询、全表扫描
- 线路问题:让玩家提供
tracert结果,看是否在某个骨干节点丢包;考虑上 CDN 或换多线机房 - 配置不足:看数据库连接池是否打满、GC 是否频繁、单机承载是否超限
三个常见误判
误判一:玩家说卡就是被攻击
玩家说的"卡"包含很多情况:客户端渲染卡、自己网络差、手机发热降频。先看服务端指标,再听玩家描述。
误判二:CPU 高就是被攻击
CPU 高也可能是死循环、内存泄漏、定时任务撞在一起。看 CPU 高的同时带宽是否异常——只有 CPU 高带宽正常,更可能是程序问题。
误判三:攻击停了就没事了
攻击期间如果被拿到了数据库权限、或者被留了后门,攻击停止只是表象。恢复流程见 服务器被 DDoS 攻击后怎么恢复。
一句话总结:先看带宽曲线定性,再看连接数和日志定位,最后才动手处置。跳过前两步直接买高防,是最常见的浪费。