深入解析:Linux 如何查看 CPU 运行状态

在 Linux 系统管理和性能调优中,实时掌握 CPU 的运行状态是至关重要的第一步。CPU 作为系统的“大脑”,其使用率、负载、运行进程等信息直接反映了系统的健康度和性能瓶颈。无论是排查程序卡顿、分析系统负载过高,还是进行容量规划,我们都需要一系列强大的工具来透视 CPU 的实时动态。

本文将系统性地介绍多种查看 Linux CPU 运行状态的方法,从最简单的命令行工具到更深入的系统文件,并结合实际示例、最佳实践,帮助你成为一名 CPU 性能分析的专家。

目录#

  1. 核心概念速览
  2. 实时监控工具
  3. 静态快照与信息查询
  4. 性能统计与瓶颈分析
  5. 常见实践与最佳实践
  6. 总结
  7. 参考资料

核心概念速览#

在开始使用工具之前,理解几个关键概念有助于你更好地解读数据:

  • CPU 使用率: CPU 非空闲时间占总时间的百分比。通常我们关注:
    • 用户态使用率 (%us):CPU 执行用户应用程序的时间。
    • 系统态使用率 (%sy):CPU 执行内核系统调用的时间。
    • 空闲率 (%id):CPU 空闲时间百分比。
    • I/O 等待 (%wa):CPU 等待磁盘 I/O 完成的时间。这个值过高通常表示磁盘是瓶颈。
    • 软中断/硬中断 (%si/%hi):处理硬件或软件中断的时间。
  • 平均负载: 系统在特定时间间隔(1分钟、5分钟、15分钟)内,处于可运行状态不可中断状态的平均进程数。可运行状态即正在使用或等待使用 CPU 的进程;不可中断状态通常是等待磁盘 I/O 的进程。如果平均负载高于 CPU 核心数,则表示系统可能过载。
  • 上下文切换: CPU 从一个进程切换到另一个进程的次数。频繁的上下文切换会消耗 CPU 资源。
  • CPU 核心与超线程: 现代 CPU 多为多核,并支持超线程(一个物理核心模拟出多个逻辑核心)。工具会按逻辑核心来显示。

实时监控工具#

2.1 top - 经典的系统监控工具#

top 是 Linux 下最常用、通常预装的实时系统监控工具。它提供了一个动态更新的全屏界面。

启动方式:

top

关键信息解读(top 界面头部): top 命令示例

  • 第一行 (top - ...): 系统当前时间、运行时间、登录用户数、平均负载。
  • 第二行 (Tasks): 进程总数及其状态(运行、睡眠、停止、僵尸)。
  • 第三行 (%Cpu(s)): 这是查看 CPU 状态的核心区域。
    • us, sy, ni, id, wa, hi, si, st 分别对应上文提到的用户态、系统态、空闲、I/O 等待等。

常用交互命令(在 top 界面中按下):

  • 1切换显示所有逻辑 CPU 核心的单独使用率,而不是一个总体平均值。这对于判断多核负载是否均衡非常重要。
  • P:按 CPU 使用率对进程列表进行排序(默认方式)。
  • M:按内存使用率排序。
  • q:退出 top

示例:

# 启动 top 并立即按 ‘1’ 查看每个核心的详情
top
#(然后按下 1)

2.2 htop - top 的增强版#

htoptop 的一个现代化替代品,界面更友好,支持鼠标操作,颜色编码,横向柱状图显示 CPU 和内存使用情况。

安装:

# Ubuntu/Debian
sudo apt install htop
 
# CentOS/RHEL
sudo yum install htop

使用:

htop

优势:

  • 直观的横向柱状图,一目了然。
  • 无需记忆快捷键,底部有常用功能提示。
  • 支持鼠标点击选择进程和操作(如 kill)。
  • 更容易地查找和过滤进程。

最佳实践: 对于日常监控,htop 是比 top 更推荐的选择。

2.3 vmstat - 虚拟内存统计#

vmstat 是一个简洁的工具,主要报告虚拟内存、进程、CPU 活动等信息。它特别适合查看上下文切换和中断次数。

基本用法:

vmstat [间隔时间] [采样次数]

示例:每隔 2 秒采样一次,共采样 5 次

vmstat 2 5

输出解读(关注 procscpu 列):

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 123456  78900 456789    0    0    10    20  100  200 10  5 85  0  0
  • r: 运行队列长度(等待运行的进程数)。这个值如果持续大于 CPU 核心数,说明 CPU 繁忙。
  • b: 处于不可中断睡眠状态的进程数(通常与 I/O 相关)。
  • us, sy, id, wa, st: 同 top 中的 CPU 使用率。
  • in: 中断次数。
  • cs: 上下文切换次数。

最佳实践: 当怀疑系统性能问题与进程调度(上下文切换过多)或中断相关时,vmstat 是首选工具。


静态快照与信息查询#

3.1 lscpu - 查看 CPU 架构信息#

lscpu 命令可以方便地读取 /proc/cpuinfo 文件,并以一种易于理解的结构化格式输出 CPU 的架构信息。

用法:

lscpu

输出示例:

架构:           x86_64
CPU 运行模式:   32-bit, 64-bit
字节序:         Little Endian
CPU:             4
在线 CPU 列表:  0-3
每个核的线程数: 2
每个座的核数:   2
座:             1
厂商 ID:        GenuineIntel
型号名称:       Intel(R) Core(TM) i7-8650U CPU @ 1.90GHz
CPU 最大 MHz:   4200.0000
CPU 最小 MHz:   400.0000

从这个输出可以清晰地看到,这是一个 4 核 8 线程(CPU:4 * 每个核的线程数:2)的 Intel CPU。

3.2 /proc/cpuinfo - 最详细的 CPU 信息库#

/proc/cpuinfo 不是一个命令,而是一个虚拟文件,它包含了系统启动时检测到的每个 CPU 核心的详细信息。

用法:

cat /proc/cpuinfo

要统计逻辑 CPU 核心的数量,可以结合 grepwc

# 统计逻辑核心数
grep -c 'processor' /proc/cpuinfo
 
# 查看每个核心的型号和频率
grep 'model name' /proc/cpuinfo | head -1

3.3 nproc - 快速获取核心数#

如果你只想知道系统可用的逻辑处理器核心数,nproc 是最快的方法。

用法:

nproc
# 输出: 8

性能统计与瓶颈分析#

4.1 mpstat - 多核 CPU 性能统计#

mpstatsysstat 工具包的一部分,是 vmstat 的 CPU 专用增强版,它可以报告每个逻辑核心的详细统计信息

安装 sysstat

# Ubuntu/Debian
sudo apt install sysstat
 
# CentOS/RHEL
sudo yum install sysstat

用法:

mpstat -P ALL [间隔时间] [采样次数]

示例:每隔 1 秒报告一次所有核心的 CPU 使用情况,共报告 3 次

mpstat -P ALL 1 3

输出解读:

Linux ... 04/01/01 _x86_64_ (4 CPU)

...
Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all    5.00    0.00    1.25    0.25    0.00    0.25    0.00    0.00    0.00   93.25
Average:       0   10.00    0.00    2.00    0.00    0.00    0.00    0.00    0.00    0.00   88.00
Average:       1    2.00    0.00    1.00    1.00    0.00    1.00    0.00    0.00    0.00   95.00
...

-P ALL 选项使得输出包含每个逻辑核心(0, 1, 2, 3...)的单独数据,这对于诊断单核瓶颈(例如,某个进程只在一个核心上跑满)极其有用。

4.2 pidstat - 按进程监控#

pidstat 同样属于 sysstat 包,它用于监控每个进程的 CPU、内存、I/O 等资源使用情况。

用法:

# 每隔 2 秒报告一次所有进程的 CPU 使用情况
pidstat -u 2
 
# 更详细地报告,包括内核态使用率
pidstat -u -l 2

4.3 sar - 系统活动报告#

sar 是系统活动报告的瑞士军刀,功能极其强大。它可以收集、报告和保存系统活动信息。它的一个巨大优势是可以查看历史数据(如果 sysstat 服务已启用并配置)。

查看当前 CPU 使用率:

sar -u 1 3  # 类似 mpstat

查看历史数据(例如,查看当天 10:00 到 11:00 的平均负载):

# 首先需要确保 sar 数据收集已开启
# 编辑 /etc/default/sysstat,将 ENABLED="false" 改为 "true"
# 然后重启服务: sudo systemctl restart sysstat
 
sar -q -s 10:00:00 -e 11:00:00

常见实践与最佳实践#

  1. 诊断流程:

    • 第一步:快速概览。使用 htoptop 查看整体情况,按 1 键检查各核心负载是否均衡。
    • 第二步:识别可疑进程。在 htop 中按 F9top 中按 k 可以结束占用过高的进程(需谨慎)。
    • 第三步:深入分析。如果问题复杂,使用 mpstatpidstat 进行更精细的按核心、按进程的分析。
    • 第四步:查看历史趋势。如果问题发生在过去,使用 sar 查看历史报告。
  2. 理解 %wa (I/O 等待):如果 CPU 空闲率 (%id) 很低,但 %wa 很高,这通常不是 CPU 本身的问题,而是磁盘 I/O 成为了瓶颈。你的优化重点应该是磁盘或存储系统。

  3. 关注平均负载:平均负载是一个综合指标。如果 15 分钟的平均负载远高于 1 分钟的平均负载,说明系统负载正在下降;反之则说明负载在上升。

  4. 不要只看 CPU:CPU 高使用率可能是结果而非原因。结合内存(使用 free -h)、磁盘 I/O(使用 iostat)和网络(使用 iftopnethogs)的数据进行综合分析。


总结#

Linux 提供了从简单到复杂、从实时到历史的一系列强大工具来监控 CPU 运行状态。没有哪个工具是万能的,关键在于根据不同的场景选择合适的工具组合:

  • 快速检查htop / top
  • 查看架构lscpu
  • 分析调度和中断vmstat
  • 诊断多核瓶颈mpstat -P ALL
  • 定位问题进程pidstat
  • 回顾历史性能sar

熟练掌握这些工具,你将能够自信地应对绝大多数与 CPU 性能相关的挑战。


参考资料#

  1. top manual page: man top
  2. htop official website: https://htop.dev/
  3. vmstat manual page: man vmstat
  4. sysstat documentation (includes mpstat, pidstat, sar): https://github.com/sysstat/sysstat
  5. Linux Kernel Documentation: /proc filesystem - https://www.kernel.org/doc/html/latest/filesystems/proc.html
  6. Brendan Gregg's Blog (性能分析大师): http://www.brendangregg.com/