CPU 高怎么查
CPU 使用率高要按层级排查:先看系统整体消耗集中在哪些核,再看具体进程,然后下钻到线程,用采样工具定位函数级热点,最后归因到计算密集、系统调用、锁竞争或垃圾回收。对应工具有 mpstat(整体)、pidstat 与 top(进程)、top -H(线程)、perf(函数热点)、strace 与 pidstat -w(系统调用与切换)。容器与限核场景下,百分比要先按配额归一化再解读。
基本信息
| 整体视图 | mpstat -P ALL |
|---|---|
| 进程视图 | pidstat -u 或 top |
| 线程视图 | top -H、ps -eLo |
| 热点分析 | perf top、perf record |
| 容器换算 | 百分比除以 cgroup 配额换算为核数 |
典型使用场景
- 收到 CPU 高告警,需要快速定位到具体进程
- 单核打满而整体不高,怀疑单线程热点
- 限核容器里 CPU 百分比超过 100% 的正确解读
- 压测中定位消耗 CPU 最多的函数
- 判断高占用是计算密集还是锁与系统调用导致
分层排查命令
分层排查命令
mpstat -P ALL 1 3 # 核间分布,先找热点核
pidstat -u 1 3 | sort -k8 -rn | head # 按 CPU 占用排序的进程
top -H -b -n1 -p <pid> | head -20 # 下钻到进程内线程
top -H -b -n1 | sort -k9 -rn | head # 全机线程视角
perf top -p <pid> --stdio | head -40 # 函数级热点
pidstat -w -p <pid> 1 3 # 上下文切换,辅助判断锁竞争
cat /sys/fs/cgroup/<组>/cpu.max # 容器限核时用于归一化
pidstat -t -p <pid> 1 3 # 线程级 CPU 占用明细分层工具对照
| 层次 | 工具 | 回答的问题 |
|---|---|---|
| 整体 | mpstat -P ALL | 消耗集中在哪些核 |
| 进程 | pidstat -u、top | 哪个进程占得多 |
| 线程 | top -H、ps -eLo | 进程内哪个线程占得多 |
| 函数 | perf top、perf record | 热点落在哪个函数 |
| 内核侧 | strace、pidstat -w、perf | 是计算、锁还是系统调用 |
限核容器中的 CPU 百分比可以超过 100%,解读时要除以配额换算成核数,否则会把正常的多核额度误判为异常。
先确认高占用是持续还是脉冲:单点采样容易抓错窗口,至少要连续采集几个周期再判断趋势。
归因方向对照
- 用户态高而系统态低:多为应用计算密集,重点看算法与循环
- 系统态偏高:怀疑系统调用、锁竞争或中断处理,结合 strace 与 perf 确认
- 等待与切换偏高:可能是锁或内存分配阻塞,看 pidstat -w 与内存指标