cpu-100

CPU 占用 100% 的定位与修复

现象

top 显示某个进程或核持续 100%,接口变慢,负载升高。多核机器上可能是单线程打满,也可能是整体过载。

快速定位

top -Hp <pid>
pidstat -p <pid> 1 5
ps -eo pid,ppid,comm,%cpu --sort=-%cpu | head -10
perf top -p <pid>
perf record -F 99 -p <pid> -g -- sleep 30
perf report
strace -c -p <pid> -f

容器里先确认是否被 CPU limit 节流:

cat /sys/fs/cgroup/cpu.stat
cat /sys/fs/cgroup/cpu.max

常见根因

  1. 死循环、忙等或重试没有退避。
  2. 正则回溯、序列化、加密等 CPU 密集操作。
  3. GC 频繁或线程池配置不合理。
  4. 流量突增、缓存击穿或惊群。
  5. 容器 CPU limit 过低导致节流,表现为“CPU 不高但很慢”。

修复

相关命令

读完自测

合上页面,先回答,再展开对照。

  1. 容器里“CPU 使用率不高但接口很慢”,应先确认什么?
  2. 如何从进程定位到具体热点线程和函数?
  3. 页面列出的 CPU 100% 常见根因有哪些?
答案
  1. 先看 cgroup 的 cpu.stat 中 throttled_usec 和 cpu.max。这样才能区分“真忙”和 CPU limit 过低导致的节流。
  2. 用 top -Hp <pid> 找到热点线程。再用 perf top 或 perf record + perf report 定位函数。
  3. 死循环或忙等没有退避、正则回溯和加密等 CPU 密集操作、GC 频繁、流量突增或缓存击穿。这些都是页面列出的常见根因。