跳到主要内容

CPU 性能分析与调优

CPU 分析工具

# 整体负载
uptime
# load average: 1.52, 1.38, 0.92(1/5/15 分钟)
# 规则:load average < CPU 核心数 = 正常

# 每个 CPU 的使用率
mpstat -P ALL 1 5

# 进程级 CPU 使用
top -b -n 1 -o %CPU | head -20
# 或 pidstat
pidstat -u 1 5

# 线程级分析
top -H -p <pid>

# 系统调用追踪
strace -c -p <pid>

# 火焰图(终极武器)
perf record -ag -p <pid> -- sleep 30
perf script | stackcollapse-perf.pl | flamegraph.pl > cpu.svg

CPU 瓶颈定位流程

调优手段

手段命令说明
CPU 亲和性taskset -c 0,1 <cmd>绑定进程到指定 CPU 核心
进程优先级nice -n -5 <cmd>提高进程调度优先级
cgroup 限制K8s resources / systemd限制容器/服务的 CPU 配额

常见面试问题

Q1: 服务器 load average 很高但 CPU 使用率不高,什么原因?

答案

load average 统计的是可运行 + 不可中断睡眠的进程数。CPU 使用率不高但 load 高,通常是大量进程处于 D 状态(不可中断睡眠 = 等待 IO):

  1. vmstat 1b 列(blocked 进程数)
  2. iostat -x 1%utilawait(磁盘是否饱和)
  3. ps aux | awk '$8~/D/' 找 D 状态进程

根因通常是磁盘 IO 瓶颈或 NFS 挂载卡住。

相关链接