云服务器CPU占用100%怎么排查,一步一步来

云服务器CPU占用突然达到100%是个很常见的问题,轻则网站变慢,重则完全无响应。遇到这种情况不要乱重启,按照下面的步骤一步步排查,通常都能找到原因。

第一步:确认CPU占用情况

SSH连上服务器后,先运行:

top

或者更直观的:

htop

看到CPU使用率排名,找出哪个进程在吃资源。重点关注%CPU列排名靠前的进程名称和PID。

第二步:判断是正常业务还是异常进程

常见的几种情况:

  • PHP/Python/Node等应用进程占用高:说明可能是代码里有死循环、慢查询、或者访问量突增导致的正常高负载。
  • MySQL/数据库进程占用高:多半是慢SQL或者没有索引的查询把CPU跑满了。
  • 不认识的进程名(如kdevtmpfsi、xmrig等):高度警惕,极可能是服务器被植入了挖矿木马。
  • 系统进程(kworker、ksoftirqd):可能是内核级别的I/O瓶颈或硬件问题。

第三步:定位具体问题

如果是Web应用进程:查看访问日志,看是否有大量并发请求或爬虫攻击:

tail -f /var/log/nginx/access.log

同时检查应用日志,看有没有报错或异常循环。

如果是MySQL:登录MySQL后执行:

SHOW PROCESSLIST;

找出正在执行的慢查询,用EXPLAIN分析SQL语句,加索引或优化查询逻辑。

如果是挖矿木马:立即隔离服务器(断开公网或修改安全组规则),用以下命令强制终止进程:

kill -9 [PID]

然后排查入侵路径(弱密码、未修补漏洞、暴露的Redis/MongoDB端口等),彻底清除后重置密码、打补丁。

第四步:临时缓解措施

如果排查需要时间,可以先临时限制某些进程的CPU使用率,或者在负载均衡层把流量切到备用机,避免用户持续受影响。

第五步:事后预防

  • 开启云监控告警,CPU超过80%自动通知
  • 定期更新系统和应用补丁
  • 关闭不必要的端口,使用密钥登录替代密码登录
  • 慢查询日志常态化开启,提前发现数据库性能问题

CPU飙100%往往是结果,真正的原因藏在进程和日志里。按照上面的步骤排查,大多数情况下十几分钟内就能定位到根因。