Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

在 Linux 系统中,/proc/stat 是一个虚拟文件(而非目录),它提供了系统启动以来的全局 CPU 和任务统计信息。这些数据由内核实时生成,用于监控系统资源的使用情况。以下是其核心内容的详细说明。

1. 关键数据

1.1. CPU数据格式

1
cpu  user nice system idle iowait irq softirq steal guest guest_nice

1.2. 每列含义

单位是:jiffies,通常 1 jiffy = 0.01秒

  • user: 用户态运行时间。
  • nice: 低优先级(nice 值调整)用户态时间。
  • system: 内核态运行时间。
  • idle: 空闲时间(不含 I/O 等待)。
  • iowait: 等待 I/O 完成的时间。
  • irq: 处理硬件中断的时间。
  • softirq: 处理软件中断的时间。
  • steal: 虚拟化环境中被其他 OS 占用的时间。
  • guest: 运行虚拟机的用户态时间。
  • guest_nice: 低优先级虚拟机用户态时间。

1.3. 数据展示

1
2
3
4
5
6
7
cpu  489345 81 330857 89794549 19984 0 85872 0 0 0
cpu0 79764 17 54858 14960422 5433 0 41964 0 0 0
cpu1 79088 4 55014 14966458 5914 0 20203 0 0 0
cpu2 82052 11 54719 14966652 3378 0 10572 0 0 0
cpu3 83431 15 55143 14966958 1857 0 6208 0 0 0
cpu4 83093 15 56974 14964865 1922 0 4011 0 0 0
cpu5 81917 19 54149 14969191 1478 0 2914 0 0 0

2. 其他数据

2.1. 进程和上下文切换

  • processes:系统启动后创建的总进程数(含线程)。
  • procs_running:当前处于运行状态的进程数。
  • procs_blocked:因等待 I/O 等原因阻塞的进程数。
  • ctxt:系统发生的上下文切换总次数。

2.2. 中断统计

  • intr:总中断次数,后跟各中断号的具体计数。
  • softirq:软件中断的总次数及分类统计。

2.3. 其他关键信息

  • btime:系统启动时间的时间戳(Unix 纪元秒数)。
  • page:内存页换入/换出次数(可能已弃用)。
  • swap:交换分区使用统计(可能已弃用)。

3. 完整示例数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cat /proc/stat
cpu 489345 81 330857 89794549 19984 0 85872 0 0 0
cpu0 79764 17 54858 14960422 5433 0 41964 0 0 0
cpu1 79088 4 55014 14966458 5914 0 20203 0 0 0
cpu2 82052 11 54719 14966652 3378 0 10572 0 0 0
cpu3 83431 15 55143 14966958 1857 0 6208 0 0 0
cpu4 83093 15 56974 14964865 1922 0 4011 0 0 0
cpu5 81917 19 54149 14969191 1478 0 2914 0 0 0
intr 48118496 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1522 1 1 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 117988336
btime 1745074235
processes 287259
procs_running 1
procs_blocked 0
softirq 26317772 0 4231278 2 1745220 0 0 1905792 7818459 35 10616986

4. 典型用途

  • 计算 CPU 使用率:通过两次读取 cpu 行的差值,计算某段时间内的 CPU 利用率。
  • 监控系统负载:结合 procs_runningprocs_blocked 分析进程状态。
  • 诊断性能问题:高 iowait 可能表示磁盘瓶颈,频繁中断或上下文切换可能影响性能。

5. 注意事项

  • 实时性:文件内容动态更新,每次读取获取的是当前瞬时值。
  • 单位差异:时间单位可能因内核配置(如 CONFIG_HZ)而异,建议用差值计算百分比而非依赖绝对值。
  • 工具依赖topmpstat 等工具的数据源即来自 /proc/stat
推荐阅读
Linux系统监控数据 - /proc/diskstats Linux系统监控数据 - /proc/diskstats Linux系统监控数据 - /proc/net/dev Linux系统监控数据 - /proc/net/dev Linux C++ 开发8 - 性能分析工具汇总 Linux C++ 开发8 - 性能分析工具汇总

评论