Linux

Linux CPU 100% 排查

·5 分钟阅读·1814 字

梳理Linux CPU 100%的故障定位流程、关键命令与处理方案

📋 目录

Linux CPU 100% 排查

1. 冷门命令:抓取全量进程、CPU快照存入日志

sar -u 1 3 > cpu_snap.log ps -efH > proc_snap.log pidstat -u -p ALL 1 2 >> cpu_snap.log


`pidstat`是 top 平替,能精准按 PID 拆分用户态 CPU 占用,弥补 top 排序盲区。

### 步骤 2:排查 top 看不见的高占用进程

1. 排查**隐藏进程(恶意程序挂载伪造 /proc)**

bash

运行

2. 冷门:ls /proc | grep -E ‘[0-9]+’ | awk ‘{print 1}' > pid.tmp && for i in (cat pid.tmp);do if [ ! -d /proc/$i ];then echo "异常PID:$i”;fi;done

mount | grep proc # 检查proc是否被恶意挂载替换


恶意进程会自建伪 /proc 目录,top 读取伪 proc 数据看不到真实 PID。 2. 排查内核态寄生线程(不在用户进程列表)

bash

运行

3. 冷门查看内核线程占用:

cat /proc/schedstat

perf top -g # 无需pid直接看内核/用户函数CPU占用,定位无PID高耗CPU代码


`perf top`是大厂排查隐形 CPU 占用核心命令,无视进程伪装。

### 步骤 3:load 过高专项:D 态不可中断进程(kill 无法杀掉核心原因)

bash

运行

4. 查找D(Uninterruptible Sleep)进程,常规top过滤不全

ps -eo pid,stat,cmd | awk ‘$2 ~ /D/’

5. 冷门:查看阻塞在哪个内核资源(磁盘/内核锁)

wchan (ps−eopid,stat∣awk′(ps -eo pid,stat | awk '2~/D/{print $1}’)


D 进程卡在硬件 IO / 内核锁,**kill -9 无效,只能重启或修复底层阻塞资源**。

### 步骤 4:kill 无法杀死进程分层排查

1. 进程被 ptrace 调试附着(杀毒 / 恶意调试程序附着,无法被 kill)

bash

运行

grep TracerPid /proc/*/status | grep -v “:0”


TracerPid≠0 代表被别的进程附着,先杀掉附着进程才可终止原进程。 2. 僵尸进程 (z) 堆积拉高 load:父进程异常未收尸

bash

运行

6. 筛选僵尸进程

ps -ef | grep defunct

7. 查找僵尸进程父PID,kill父进程回收僵尸


僵尸进程不耗 CPU,但海量僵尸会抬升 load;若 us98%+ 僵尸共存,多为业务 fork 异常。 3. 内核模块劫持进程:进程表被 rootkit 篡改

bash

运行

lsmod | sort

chkrootkit # 运维冷门安全排查工具,排查内核级恶意模块


### 步骤 5:应急止血 + 根治

1. 临时:perf 定位函数→找到真实 PID,D 进程优先修复阻塞磁盘 / 硬件;ptrace 劫持先杀附着进程;rootkit 恶意进程卸载异常内核模块。

2. 长效:开启 proc 审计`auditd`,监控 /proc 挂载变更、进程创建,接入 Prometheus 监控 CPU + 进程状态。

## 【面试官延伸追问】

1. 若 perf 也看不到异常用户态函数,us 持续高占用还有哪些极端场景?

2. fork 炸弹导致 CPU 打满、瞬间生成上万进程,top 卡死无法操作,如何单命令快速恢复?

3. 容器环境下宿主机 CPU us98%,宿主机 top 无高占用,如何定位容器内异常进程?

## 【踩坑易错点】

1. 误区 1:load 高 = CPU 不够,直接升配;D 进程 / 僵尸进程大量堆积无 CPU 消耗也会 load 飙升。

2. 误区 2:kill -9 反复执行无效就放弃,D 态 /ptrace 附着进程本身不受信号控制,杀不死是正常内核机制。

3. 误区 3:只用 top 定位,忽略 perf、pidstat、wchan,隐藏进程场景 top 完全失效。

plaintext

8. 配套标签快速归类

后续同类CPU故障题统一复用标签:[Linux,CPU故障,故障排查,基础题]

需要我把这道题单独导出文件名:[Linux-基础-故障题-CPU98%找不到进程].md规范命名吗?


---

> [!info] 关联文档
> - [[perf 命令详解]]:perf 工具
> - [[perf top 与 top 命令区别]]:工具区别
> - [[服务器 IO 过高排查流程]]:IO 排查
Yanche Blog

记录云原生、Linux、数据库等技术领域的学习心得,以及日常生活的思考与感悟。

© 2026 Yanche Blog. All rights reserved.

Powered by Astro