Linux CPU 占用过高:揪出元凶并夺回流畅体验
一套以终端为主的排查流程:定位 Linux 上 CPU 占用过高的进程或服务,并安全地修复它。
快速开始
Linux 上 CPU 占用过高的典型表现是风扇狂转、机器发烫、桌面一点就卡。本指南带你从一张进程快照开始,到实时观察负载,再判断到底是某个进程还是某个 systemd 服务在作怪,最后教你如何降低优先级或调整系统设置,让机器恢复流畅——而不是盲目地杀进程。
症状
先给系统拍一张进程快照
深入排查之前,先用一条命令列出所有进程及其 CPU 占用。按 %CPU 列排序,通常一眼就能看到可疑的进程。如果某个进程接近 100%,问题范围就锁定了;如果是多个进程分摊负载,则需要下一步的实时视图。
实时观察负载,锁定元凶
静态快照可能漏掉间歇性的尖峰。打开交互式监控工具,实时查看每个核心的 CPU 曲线,按 CPU 排序,确认高占用进程是持续的还是阵发性的。记下元凶的 PID,后面修复步骤会用到。如果某个进程明显失控,也可以直接在这里终止它。
启动一个交互式进程查看器,顶部有各 CPU 核心内存交换分区的彩色仪表,支持搜索、排序和直接结束进程。
$ htop排查是不是某个 systemd 服务在作怪
如果高占用的进程其实属于某个服务(数据库、容器、后台守护进程),按控制组查看用量可以把开销归到服务名而不是零散的 PID 上,一眼看清是哪个服务在吃 CPU。这是回答“是不是系统自己在跑的东西”最快的方法。
以服务(cgroup)为单位查看 CPU、内存和 I/O 占用,比 top 更直观。
$ systemd-cgtop --order=cpu --depth=2对可疑进程做一段时间的画像
对于间歇性或行为异常的进程,可以针对它的 PID 采集几分钟的 CPU、内存和 I/O 时序数据。这能帮你判断负载到底是持续的计算、内存不足引发的交换抖动,还是 I/O 等待——不同结论对应不同的处理办法。
pidstat 可按时间序列输出某个 PID(或全部任务)的 CPU、内存和 I/O 统计,适合长时间记录进程行为。
$ pidstat -u -r -d -p 1234 2 5降低高占用进程的优先级
如果吃 CPU 的是不能停的任务(备份、编译、批量导入),不必杀掉它——降低它的优先级即可。用之前记下的 PID 调高它的 nice 值,让它把 CPU 让给前台交互程序。桌面卡顿应立刻缓解,而后台任务继续运行。
不中断任务,降低或提高进程的 nice 值,让大任务不再拖慢桌面。
$ sudo renice -n 10 -p 12345▾ 撤销
$ sudo renice -n 0 -p 12345防止复发:以低优先级启动重负载任务
如果同一个脚本或命令总是把系统拖慢,那就从一开始就用低优先级启动它,让它永远不和你的前台操作抢 CPU。这一步是上一个修复的预防版。
用更高的 nice 值启动命令,让它主动把 CPU 让给交互式程序。
$ nice -n 10 ./backup-script.sh检查 CPU 是否被卡在省电调频策略上
有时问题不在单个进程,而是所有程序都变慢、占用率居高不下:核心被困在省电调频策略时,同样的活要干更久,占用率自然降不下来。切换到 performance 调频策略让核心提速、更快清空任务队列。这会改变全机的功耗行为,如果原本是有意设置的,之后记得改回来。
cpupower frequency-set 可把 CPU 调频策略切换为 performance(性能优先)或 powersave(省电优先)。
$ sudo cpupower frequency-set -g performance▾ 撤销
$ sudo cpupower frequency-set -g powersave如何确认已解决
修复后重新打开实时进程监控:整体 CPU 占用应当下降;如果重负载任务仍在运行,你的前台应用应当能流畅响应,因为它已在后台以更低优先级运行。
一键全部撤销
上面每一条命令都可以撤销。按此顺序执行即可全部还原。
$ sudo cpupower frequency-set -g powersave
sudo renice -n 0 -p 12345执行前请先确认——部分步骤之间可能并非相互独立。
来源
- Ubuntu Manpage: ps - report a snapshot of the current processes依据: "ps displays information about a selection of the active processes"; the u option selects the user-oriented format with USER, %CPU, %MEM, and COMMAND headers.
- ps - report a snapshot of the current processes依据: The ps page documents the a, u, and x options ("u Display user-oriented format" including USER, %CPU, %MEM, and COMMAND columns) and describes ps as reporting "a snapshot of the current processes".
- htop(1) — interactive process viewer依据: The htop man page describes it as an interactive text-mode process viewer that allows scrolling vertically and horizontally, unlike top.
- htop - an interactive process viewer依据: The official htop site describes real-time CPU, memory, and swap meters plus interactive process sorting and killing.
- systemd-cgtop(1) — Debian bookworm依据: Same synopsis systemd-cgtop [OPTIONS...]; describes ordering by CPU, memory or I/O load and the --depth= cut-off.
- systemd-cgtop(1) - Linux manual page依据: Documents systemd-cgtop [OPTIONS...] with options --order=, --depth=, -P, -m showing task/CPU/memory/I/O usage per control group.
- pidstat(1) - Report statistics for Linux tasks依据: pidstat reports statistics for Linux tasks (processes): -u CPU usage, -r memory, -d I/O, -p selects a task, with interval and count arguments.
- renice(1) — Ubuntu manpage依据: Ubuntu manpage shows renice alters the scheduling priority of running processes, with -p targeting process IDs
最后验证: 2026-09-21