上一篇文章我们理解了平均负载、上下文切换和中断这三个 CPU 核心指标现在需要用工具把它们“可视化”出来。CPU 性能分析工具非常多但真正高频使用的也就那么几个。本文聚焦于四个最核心的工具top/htop全局进程视图、mpstat多核分布视图和 pidstat进程级精细视图。掌握这四把“手术刀”你就能从“系统整体负载高”快速定位到“具体是哪个进程的哪个线程在消耗 CPU”。一、top系统自带的全能选手top 是 Linux 系统预装的进程监控工具几乎是所有性能排查的第一步。1.1 启动与基本操作top进入交互界面后常用快捷键1.2 关键指标解读top 输出的上半部分是系统统计信息top-14:23:01 up10days,3:15,2users, load average:2.50,1.80,1.20Tasks:123total,2running,121sleeping,0stopped,0zombie %Cpu(s):25.0us,5.0sy,0.0ni,68.0id,1.0wa,0.0hi,1.0si,0.0stususer用户态 CPU 占用。应用程序代码运行的时间占比。sysystem内核态 CPU 占用。系统调用、内核操作的时间占比。如果 sy 持续 30%可能存在系统调用过于频繁的问题。ninice低优先级nice 值为正进程的 CPU 占用。ididle空闲 CPU。waiowait等待 I/O 完成的时间。wa 20% 通常意味着磁盘或网络 I/O 成为瓶颈。hihardware interrupt硬中断处理时间。sisoftware interrupt软中断处理时间。网络密集型服务器上 si 通常较高。ststeal time虚拟化环境中宿主机 CPU 被其他虚拟机占用的时间。st 10% 说明宿主机 CPU 超售严重。1.3 进程列表关键列1.4 实战技巧技巧一将 top 输出保存到文件top-d1-b-n3top.log# 间隔1秒采集3次数据[reference:6]技巧二只监控特定进程top-p1234# 只监控 PID 为 1234 的进程技巧三显示完整的命令行按 c 键可切换显示完整命令行方便区分同名进程。二、htoptop 的现代化增强版htop 是 top 的改进版本界面更友好、操作更直观但需要单独安装# Ubuntu/Debiansudoaptinstallhtop# CentOS/RHELsudoyuminstallhtop2.1 htop 的主要优势2.2 htop 常用操作F2进入设置菜单可自定义显示的列和排序方式F3搜索进程F4过滤器只显示匹配的进程F5树形视图查看进程父子关系F6选择排序字段F9kill 进程F10退出2.3 何时用 htop 替代 top需要快速理解进程间关系树形视图比 top 的平面列表直观得多。需要频繁操作进程htop 的鼠标支持和快捷键让操作更高效。视觉偏好彩色界面让数据一目了然。三、mpstat多核 CPU 的“X 光机”mpstatMultiprocessor Statistics是 sysstat 工具包的一部分核心价值是查看每个 CPU 核心的详细使用率。安装方法sudoaptinstallsysstat# Ubuntu/Debiansudoyuminstallsysstat# CentOS/RHEL3.1 基本用法# 查看所有 CPU 核心的统计信息每秒刷新一次mpstat-PALL1[reference:10]输出示例19:43:58 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle19:43:59 all0.000.000.040.000.000.000.000.0099.9619:43:5900.000.000.000.000.000.000.000.00100.0019:43:5910.000.000.000.000.000.000.000.00100.0019:43:59299.010.000.000.000.000.000.000.000.99[reference:11]3.2 输出字段详解3.3 mpstat 的典型应用场景场景一发现“单核打满”问题整体 CPU 使用率看起来不高如 25%但应用性能却很差。用 mpstat -P ALL 1 检查每个核心CPU %usr %idle0100%0% ← 核心0已打满10%100%20%100%30%100%结论应用是单线程计算密集型需要优化代码支持多线程或使用 taskset 绑定到特定核心。场景二判断中断分布是否均衡查看 %irq 和 %soft 在各核心上的分布。如果某个核心的 %irq 特别高说明中断没有均匀分布需要调整中断亲和性。场景三确认 CPU 饱和%idle 持续 10% 表明 CPU 已饱和。四、pidstat进程级的“显微镜”pidstat 同样是 sysstat 工具包的一部分它能按进程或线程精细统计 CPU、内存、I/O 和上下文切换。4.1 CPU 使用率统计-upidstat-u51# 每5秒采样一次输出1次[reference:16]输出13:37:07UIDPID %usr %system %guest %wait %CPU CPU Command13:37:1202962100.000.000.000.00100.001stress[reference:17]%wait等待 CPU 的时间占比即进程就绪但未获得 CPU 的时间。%CPU总 CPU 使用率%usr %system。 实战价值%wait 列能直接告诉你进程是否在排队等 CPU。如果 %wait 很高但 %CPU 不高说明系统 CPU 饱和进程在排队。4.2 上下文切换统计-w这是 pidstat 最独特的功能——它能告诉你每个进程的上下文切换情况而 vmstat 只能看系统总数。pidstat-w5[reference:21]输出08:18:26UIDPID cswch/s nvcswch/s Command 08:18:31010.200.00systemd 08:18:31085.400.00rcu_sched[reference:22]cswch/s自愿上下文切换——进程主动让出 CPU如等待 I/O、锁、sleep。高值通常意味着 I/O 密集型应用。nvcswch/s非自愿上下文切换——进程被系统强制抢占时间片耗尽。高值意味着 CPU 竞争激烈。 实战价值高 nvcswch/s 高 %wait → CPU 饱和需要增加 CPU 或优化代码。高 cswch/s → I/O 瓶颈或锁竞争。4.3 查看线程级别的上下文切换-wtpidstat-wt1[reference:27]输出示例08:14:05UIDTGID TID cswch/s nvcswch/s Command 08:14:05010551-6.000.00sysbench 08:14:050-105516.000.00|__sysbench 08:14:050-1055218911.00103740.00|__sysbench ← 子线程上下文切换极高即使主线程的上下文切换看起来正常子线程可能才是真正的“罪魁祸首”。4.4 其他常用选项五、四款工具的协作流程当遇到 CPU 性能问题时按以下顺序使用这四款工具text第1步top / htop↓ 发现 CPU 使用率高的进程 PID第2步mpstat -P ALL 1↓ 确认是单核打满还是多核均衡第3步pidstat -u -p PID 1↓ 确认该进程的 CPU 使用率和 %wait第4步pidstat -w -p PID 1↓ 查看上下文切换类型自愿/非自愿第5步根据结果深入排查├── 非自愿切换高 → CPU 竞争激烈 → 考虑扩容或优化代码├── 自愿切换高 → I/O 等待或锁竞争 → 用 iostat 检查磁盘└── 单核打满 → 代码单线程瓶颈 → 考虑多线程改造或 taskset六、小结top第一现场工具快速定位 CPU/内存占用最高的进程。htoptop 的增强版界面友好、操作高效。mpstat查看每个 CPU 核心的使用率分布发现“单核打满”问题。pidstat进程级精细分析查看 CPU、上下文切换、内存、I/O 等指标。这四个工具构成了 CPU 性能分析的“标准四件套”熟练掌握它们你就能从“系统负载高”快速定位到具体是哪个进程的哪个线程在消耗 CPU以及为什么消耗。