温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

服务器CPU使用率过高怎么排查

发布时间:2026-10-11 18:35:58 来源:亿速云 阅读:122 作者:小樊 栏目:系统运维

服务器 CPU 使用率过高是常见的运维问题,排查通常遵循“先看整体 → 再定位进程 → 再分析线程/代码 → 最后确认原因”的思路。下面给你一套通用排查流程(Linux 环境为主,也适用于大多数服务器)。


一、快速确认 CPU 使用情况

1. 看整体 CPU 占用

top

或更好用的:

htop

关注:

  • %Cpu(s):us(用户态)、sy(系统态)、id(空闲)
  • 哪个进程 CPU 高

按 P 可按 CPU 排序。


2. 查看多核分布

mpstat -P ALL 1

判断是:

  • 单核打满(很可能是某个线程)
  • 多核均衡高(可能是并发请求或计算任务)

二、定位高 CPU 进程

1. 找出最耗 CPU 的进程

ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu | head

记录:

  • PID
  • 启动命令(判断是 Java / Nginx / 自研程序)

三、进一步定位线程(重点)

1. 查看该进程的线程

top -Hp <PID>

或

ps -T -p <PID> -o pid,spid,pcpu,cmd

找到高 CPU 的 线程 ID(SPID)


2. 线程 ID 转十六进制

printf "%x\n" <SPID>

3. 查看线程在干什么(Java 示例)

jstack <PID> | grep <十六进制线程ID> -A 20

可以看到:

  • 是否在 GC
  • 是否在死循环
  • 是否在锁等待

四、常见高 CPU 原因 & 对应排查点

1. 业务代码死循环 / 频繁计算

  • top -Hp 单线程 CPU 100%
  • jstack 看到 RUNNABLE + 业务方法

✅ 解决:

  • 检查循环条件
  • 限流 / 异步 / 缓存

2. 频繁 GC(Java 常见)

jstat -gcutil <PID> 1000

如果:

  • FGCT 很高
  • O 区满

✅ 解决:

  • 调 JVM 参数
  • 查内存泄漏

3. 系统调用过多(sy 高)

perf top

或

strace -p <PID>

常见:

  • 大量短连接
  • 频繁写日志
  • 锁竞争

4. 外部请求风暴

  • CPU 高 + 网络流量高
  • Nginx / 网关 CPU 高

✅ 解决:

  • 限流
  • 封 IP
  • 加缓存

5. 挖矿 / 中毒(不能忽视)

特征:

  • 未知进程名
  • CPU 长期 100%
  • 进程删了又起

✅ 解决:

  • 查 cron / systemd
  • 杀进程 + 查漏洞

五、辅助工具推荐

工具 作用
top / htop 实时 CPU
mpstat 多核分析
pidstat 进程/线程 CPU
perf 内核级热点
jstack / jstat Java 专用
nethogs 网络进程排查

六、排查顺序总结(速查)

  1. top → 高 CPU 进程
  2. top -Hp → 高 CPU 线程
  3. jstack / perf → 在做什么
  4. 判断:代码 / GC / 系统 / 攻击
  5. 对应优化或止损

如果你愿意,可以告诉我:

  • 服务器系统(CentOS / Ubuntu / 容器?)
  • 什么服务(Java / Python / Nginx?)
  • CPU 是 us 高还是 sy 高

我可以直接帮你针对性给命令和判断思路。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手