Linux 服务器 CPU 占用高时的排查思路与实战命令

举报
yd_99838092 发表于 2026/10/29 09:31:14 2026/10/29
【摘要】 从 top 线程级定位到 perf/strace 分析,整理一套可复用的 Linux CPU 占用高排查流程与常用命令。

<h2>一、先确认“高”在哪个维度</h2>

<p>登录服务器后第一件事是看 top 的输出,重点不是看总的 CPU 利用率,而是拆开看几个指标:%us 是用户态占用,%sy 是内核态占用,%wa 是 IO 等待,%st 是被虚拟化层偷走的比例。如果 %wa 高,问题往往在磁盘 IO 而不是 CPU 计算;如果 %st 高,说明宿主机资源紧张,应用本身可能没问题。先把方向确定下来,后面的排查才不会南辕北辙。</p>

<h2>二、从进程到线程逐层定位</h2>

<p>top 找到占用最高的进程 PID 后,按 H 切换线程视图,或者直接用 top -H -p PID,观察具体是哪个线程在消耗 CPU。对 Java 服务,把线程号转成十六进制后到 jstack 输出里搜索,就能对应到具体堆栈;对 Go 服务,pprof 的 goroutine 视图会更直观。很多时候“CPU 高”最终都能落到某段具体代码上。</p>

<h2>三、常见原因与判断方法</h2>

<p>实践中见过的高 CPU 场景大致有几类:一是死循环或忙等待,特征是 CPU 曲线平滑地贴着 100%;二是频繁 GC,可以用 jstat -gcutil 观察 GC 次数和耗时;三是锁竞争后的自旋,需要结合火焰图看;四是大量小文件或网络系统调用,%sy 会明显偏高。不同原因对应的优化方向完全不同,先归因再动手。</p>

<h2>四、好用的工具组合</h2>

<p>pidstat -u 1 可以按进程持续采样,适合观察趋势;perf top 能直接看到热点函数,配合 perf record + perf report 生成火焰图数据;strace -c -p PID 统计系统调用耗时,但会对性能有明显影响,线上慎用。另外,vmstat 1 的 r 列如果长期大于核数,说明有大量任务在等待调度,也是 CPU 压力的信号。</p>

<h2>五、一个小结</h2>

<p>CPU 排查的核心思路是“先分维度、再分进程、最后分线程”的逐层收敛,工具只是手段。把这些命令整理成自己的排查清单,遇到告警时按步骤走一遍,比临时翻文档效率高得多。最后提醒一点:不要在生产环境长时间挂 perf 和 strace,采样类工具优先,抓取类工具要评估影响。</p>

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。