先分清:CPU 100% 是”被打”还是”自己吃满”
游戏开服服务器最常见的故障现象就是:玩家反馈卡顿、技能放不出来、登录转圈,后台一看 top 里 CPU 长期 100%。这时候先别急着换机器,先判断是被攻击还是程序自身吃满——两者的处理方式完全不同。
第一步:确认是哪个进程在吃 CPU
登录服务器执行:
top -c # 按 P 排序,看 %CPU 最高的进程
ps aux --sort=-%cpu | head -10
常见结果只有三类:
- mysqld:数据库慢查询、缺索引、全表扫描
- 游戏服务端进程:脚本死循环、地图刷新过多、怪物 AI 计算过密
- php-fpm / nginx:官网或论坛被 CC 刷接口
第二步:看负载与磁盘 IO
uptime # load average 是否远大于核数
iostat -x 1 # %util 接近 100% 说明磁盘是瓶颈
如果 CPU 不高但玩家依然卡,问题往往在磁盘 IO:日志狂写、数据库随机读、备份任务同时跑,都会让游戏线程阻塞。
第三步:看连接数是否异常
ss -s # 总连接数
ss -ant | awk '{print $1}' | sort | uniq -c
大量 SYN_RECV 说明可能在被 SYN Flood;大量 ESTABLISHED 且来自少量 IP,多半是 CC 或连接耗尽攻击。这一步是判断”要不要上高防服务器“的关键。
第四步:看带宽有没有被打满
iftop -n -P # 实时看流量来源
vnstat -l # 看带宽是否持续跑满
带宽被打满而 CPU 空闲,是典型的流量型 DDoS;这类攻击靠优化程序没用,必须走清洗。
第五步:排查程序侧的高消耗逻辑
- 数据库慢查询日志里 TOP 10 语句,补索引或改写
- 定时任务是否在高峰期跑(备份、统计、清理)
- 玩家数上涨后,单机承载是否已到上限(分线、分服)
常见原因与处理建议
| 现象 | 常见原因 | 处理方式 |
|---|---|---|
| mysqld 吃满 CPU | 慢查询、缺索引 | 加索引、拆表、读写分离 |
| 带宽跑满、CPU 空闲 | 流量型 DDoS | 接入高防 IP 或高防服务器 |
| 大量 SYN_RECV | SYN Flood | 清洗 + 源认证 |
| php-fpm 飙升 | 官网被 CC | 限速 + 人机校验 |
| IO 长期 100% | 日志/备份/随机读 | 分离存储、错峰任务 |
什么时候该换方案
如果排查后确认是攻击导致的卡顿,优化代码能起的作用有限,建议直接上高防服务器:单机 400G 硬件防火墙、独享带宽、BGP 多线,攻击期间玩家不掉线。我们的套餐覆盖山东、襄阳、扬州、台州、镇江等机房,价格见套餐价格,也可以联系我们说明现象,帮您判断是程序问题还是攻击。

