CPU高占用的排查
作为一名 Linux 系统工程师,我确信你们都使用过 top 命令。它一直是几十年来首选的工具——简单、可靠,并且在你需要时总是存在。但你有没有注意到一件事?偶尔,你可能会发现一个进程的 CPU 使用率飙升到 150%、200%甚至 400%!这里发生了什么?这是怎么可能的?
乍一看,这些数字可能看起来像是个错误——毕竟,什么东西会使用超过 100%的 CPU 呢?系统是出问题了吗?还是被黑了?但实际上,这完全正常。原因在于 Linux 报告 CPU 使用率的方式以及多核处理器的工作原理。
在本文中,我们将探讨为什么会发生这种情况,并使用实用工具和实际案例来证明这一点。
2026.02 山东·青岛
使用 top 检查 CPU 利用率
CPU 是任何操作系统的核心,执行指令以允许程序运行。在 Linux 中,top 命令是一个方便的工具,提供实时性能洞察。它显示关键系统指标,例如:
- 进程使用情况
- 内存消耗
- CPU 负载
当系统出现高 CPU 利用率时,top 有助于识别哪些进程占用了最多的资源,从而更容易诊断性能问题。
要检查 CPU 利用率,请打开终端并运行:
1 | top |
该命令将生成实时性能概览。输出中最关键的部分之一是每个进程的 CPU 使用率。
这是我在 Linux 中运行的 top 命令的输出结果,你可能注意到某些进程显示的 CPU 利用率超过 100%。
示例:
1 | PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND |
这里,进程 YYYY 正在消耗 150% 的 CPU 使用率 ——但这怎么可能呢?
为什么 CPU 使用率会超过 100%
理解多核处理
将你的 CPU 想象成一群工人。在过去,电脑只有一个工人(单核处理器)。如果一个任务需要那个工人 100% 的时间,系统就会报告 100% 的 CPU 使用率。现在,现代 CPU 有多个工作单元(多核处理器)。如果你有四个核心,你的系统就有四个工作单元。一个任务可以分配到多个核心上。这意味着一个进程可能会使用两个核心的 100%,导致在 top 中报告 200%的 CPU 使用率。我们稍后会用工具来证明这一点。所以,这些高数字不是错误;它们证明了现代多核处理器的强大!
导致 CPU 使用率超过 100%的关键因素:
- 多核处理器 :具有多个核心的 CPU 可以同时处理多个任务。
- 负载分配 :Linux 调度器能够高效地将负载分配到各个核心。
- 多线程 :如果一个进程是多线程的,它可以在同一时间利用一个以上的核心。
Linux 如何报告 CPU 使用率
Linux 基于单个核心报告 CPU 使用率。这意味着如果一个进程使用了 1.5 个 CPU 核心,它将在 top 中显示为 150% 的 CPU 使用率。
示例分解:
- CPU-1 → 进程
YYYY正在使用该核心的 **100%**。 - CPU-2 → 另一个
YYYY线程正在使用这颗核心的 **50%**。
报告的总 CPU 使用率:**100% + 50% = 150%**。
这种行为也在 top 命令手册中正式记录:
在一个真正的 SMP(对称多处理)环境中,如果一个进程是多线程的,并且 top 不以线程模式运行,可能会报告超过 100% 的数值。
模拟高 CPU 使用率:一个实际操作示例
让我们手动创建负载,看看 Linux 如何报告它。
步骤 1:安装 stress 工具
1 | sudo apt install -y stress |
步骤 2:生成 CPU 负载
运行命令以在 60 秒内充分利用 4 个 CPU 核心:
1 | stress --cpu 4 --timeout 60 |
步骤 3:使用 top 和 mpstat 进行监控
- 在一个终端中运行
top并按1查看每个核心的使用情况。 - 在另一个终端中运行
mpstat -P ALL 1来跟踪核心利用率。
1 | PID USER %CPU COMMAND |
这证实了 stress 正在充分利用 4 个核心。
查看每个线程的 CPU 使用情况
要获取更详细的关于 CPU 使用率如何在线程之间分布的信息,请使用:
1 | top -H |
该命令显示进程中的每个线程,让你看到进程如何利用多个核心。
1 | kill -9 <PID> |
检查你的 CPU 核心数
想知道你的系统有多少个核心?运行:
1 | nproc --all |
如果输出 4,则您的系统有四个核心。如果一个进程完全利用所有四个核心,top 可能会显示 400% 的 CPU 使用率。
现代 CPU 经常使用超线程技术,单个物理核心表现得像两个逻辑核心。
例如,一个具有超线程技术的 4 核 CPU 会显示为 8 个逻辑核心。这提高了并行处理能力,但也意味着 Linux 可能会将 CPU 使用率报告为这些逻辑核心的百分比。
查看每个核心的 CPU 使用情况
想单独查看每个核心的 CPU 使用情况吗?在 top 运行时按下 1。
你会看到类似这样的输出:
1 | Cpu0 : 75.0 us, 0.0 sy, 0.0 ni, 25.0 id |
每个核心都在处理自己的任务份额。
自定义 top 以获得更好的可见性
更改显示模式
按下 I(大写的 i)在累计和每个核心的 CPU 使用率之间切换。
调整更新间隔
想要更频繁的更新?在 top 运行时按下 d 并输入一个较小的数字(例如,1 秒)。
按 CPU 使用率排序进程
按下 Shift + P 按 CPU 消耗排序。
结束高占用进程
如果一个进程占用资源过多,你可以从 top 终止它。按下 k,输入 PID,并确认。
要点
- 看到 CPU 使用率超过 100% 是正常的。 这意味着该进程正在使用多个 CPU 核心。
- 使用
top来监控 CPU 使用率。 按1查看每个核心的使用情况。 - 运行
nproc --all来检查你的核心数量。 - 使用
stress来模拟高 CPU 工作负载。 - 使用
top快捷键优化监控。
理解 CPU 使用率对于系统性能监控至关重要。现在,下次当你看到 CPU 使用率超过 100% 时,你将确切知道发生了什么!
原文链接:If Your CPU Usage is Over 100%, Read This Before Freaking Out!






