温馨提示×

温馨提示×

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

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

服务器CPU飙高怎么排查

发布时间:2026-11-01 21:39:24 来源:亿速云 阅读:104 作者:小樊 栏目:系统运维

服务器 CPU 飙高一般可以按「先看现象 → 定位进程 → 定位线程 → 定位代码/原因」的思路排查。下面给你一套实战可操作的排查流程(以 Linux 为例)。


一、快速确认 CPU 使用情况

1. 看整体负载

top
# 或
htop

关注:

  • %Cpu(s):us(用户态)、sy(系统态)、id(空闲)
  • load average 是否远高于 CPU 核数

2. 看哪个进程吃 CPU

在 top 中按:

  • P:按 CPU 排序
  • 找到 CPU% 最高的 PID

二、定位到具体线程

1. 查看进程内线程

top -Hp <PID>
  • 找到占用 CPU 高的 线程 ID(TID)

2. 线程 ID 转十六进制

printf "%x\n" <TID>

例如:

printf "%x\n" 12345
# 输出 3039

三、分析线程在干什么(Java 示例最常见)

1. 打印线程栈

jstack <PID> > jstack.log

2. 搜索线程

在 jstack.log 中搜索:

nid=0x3039

可以看到:

  • 线程名
  • 调用栈
  • 是否在:
    • 死循环
    • 频繁 GC
    • 锁竞争
    • 网络/IO 阻塞

四、常见 CPU 高原因 & 对应特征

1. 死循环 / 算法问题

特征:

  • us 高
  • 单线程 CPU 100%
  • jstack 中线程卡在业务代码

✅ 解决:

  • 检查 while / for / 递归
  • 算法复杂度问题

2. 频繁 GC(Java)

jstat -gcutil <PID> 1000

特征:

  • sy + us 都高
  • GC 时间占比大

✅ 解决:

  • 调堆大小
  • 查内存泄漏

3. 锁竞争

jstack 中常见:

BLOCKED
waiting to lock

✅ 解决:

  • 减小锁粒度
  • 使用并发容器

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

perf top

常见于:

  • 频繁上下文切换
  • 大量短连接

五、非 Java 场景通用排查

CPU 高但不知道是什么

perf top

可以看到:

  • 内核函数
  • 用户态函数

六、辅助命令汇总

uptime
vmstat 1
mpstat -P ALL 1
pidstat -u 1 -p <PID>

七、临时止损方案

  • 限流
  • 重启异常进程
  • 摘流量(微服务)

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

  • ✅ 操作系统(Linux / Windows)
  • ✅ 是否 Java / Go / Python
  • ✅ CPU 是 us 高还是 sy 高

我可以直接帮你针对性定位。

向AI问一下细节

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

AI
助
手