在 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_running
和 procs_blocked
分析进程状态。
- 诊断性能问题:高
iowait
可能表示磁盘瓶颈,频繁中断或上下文切换可能影响性能。
5. 注意事项
- 实时性:文件内容动态更新,每次读取获取的是当前瞬时值。
- 单位差异:时间单位可能因内核配置(如
CONFIG_HZ
)而异,建议用差值计算百分比而非依赖绝对值。
- 工具依赖:
top
、mpstat
等工具的数据源即来自 /proc/stat
。