linux下/proc/stat字段含义

本文介绍了一种通过两次读取系统文件来计算CPU资源使用率的方法。具体步骤包括获取user和sys等字段的数据,计算两次读取之间的差值,进而得出CPU占用率。

       user     system nice     idle       iowait   irq    softirq

cpu  17906755 86377  53312329 1322524322 29311124 101704 1096939
cpu0 4665564  22883  13417357 330376020  7206071  99986  297154
cpu1 4488897  20352  13351971 330749128  7202582  0      271926
cpu2 4434851  22675  13302518 330622140  7455115  1718   245786
cpu3 4317443  20467  13240483 330777034  7447356  0      282073
第一行是总的情况
第二行到第五行分别代表每个cpu的情况
 

对这个文件需要读取两遍,我们用total表示累计总资源,那么user+sys就是我们想要知道的累计CPU占用的资源。每个变量后面的数字表示它是第几次读文件得到的,用如下方法可算出CPU占用率:
Total_1=user_1+nice_1+sys_1+idle_1
Total_2=user_2+nice_2+sys_2+idle_2

Rate={[(user_2+sys_2)-(user_1+sys_1)]/(total_2-total_1)}*100

 

转自http://blog.sina.com.cn/s/blog_5546a5ad010007mq.html

### /proc/stat 文件格式解析 #### 总体概述 `/proc/stat` 是 Linux 系统中的一个重要文件,位于 `/proc` 虚拟文件系统下。该文件提供了一系列关于整个系统性能的统计数据[^1]。这些数据主要用于监控 CPU 使用率、内存状态以及 I/O 操作等方面。 --- #### 主要字段及其含义 ##### 1. **CPU 统计** `/proc/stat` 的第一行通常表示整体 CPU 的使用情况。这一行以关键字 `cpu` 开头,后面跟着多个数值,分别代表不同的 CPU 时间片类别[^2]: - **user**: 用户空间占用的 CPU 时间。 - **nice**: 用户空间内改变过优先级 (Nice 值调整) 的进程所使用的 CPU 时间。 - **system**: 系统调用消耗的时间,即内核态下的 CPU 占用时间。 - **idle**: CPU 处于空闲状态的时间。 - **iowait**: CPU 等待 I/O 完成的时间。 - **irq**: 硬中断处理花费的时间。 - **softirq**: 软中断处理花费的时间。 完整的 CPU 计算公式如下: ```plaintext CPU总时间 = user + system + nice + idle + iowait + irq + softirq [^5] ``` 如果需要进一步细化分析单个核心的情况,则后续会有类似的条目,形如 `cpu0`, `cpu1` 等,分别对应各个逻辑处理器的核心统计信息。 --- ##### 2. **其他重要统计项** 除了 CPU 数据外,`/proc/stat` 还包含了多种类型的全局系统活动指标。以下是几个常见的项目及其意义[^4]: - **ctxt**: 上下文切换次数。每次线程或进程被调度器重新安排执行顺序时都会增加此值。 - **btime**: 系统启动以来经历的秒数(自 Unix epoch 开始),可用于计算开机时间。 - **processes**: 创建的新进程总数(包括线程)。 - **procs_running**: 当前正在运行的任务数量。 - **procs_blocked**: 阻塞状态的任务数目,等待某些资源释放才能继续工作。 --- #### 示例代码:读取并解析 `/proc/stat` 以下是一个简单的 Python 脚本示例,展示如何从 `/proc/stat` 提取出 CPU 利用率的相关信息: ```python def parse_cpu_stat(): with open('/proc/stat', 'r') as f: lines = f.readlines() cpu_line = None for line in lines: if line.startswith('cpu'): cpu_line = line.strip().split() break if not cpu_line or len(cpu_line) < 8: raise ValueError("Invalid format of /proc/stat") total_time = sum(map(int, cpu_line[1:])) # Sum all time slices except the label. idle_time = int(cpu_line[4]) # Idle time slice. return { "total": total_time, "idle": idle_time } if __name__ == "__main__": stats = parse_cpu_stat() print(f"Total CPU Time: {stats['total']} ms") print(f"Idle CPU Time: {stats['idle']} ms") ``` 上述脚本通过逐行扫描找到第一个匹配的关键字 `cpu` 并提取其后的各项参数来完成基本的数据采集操作[^3]。 --- #### 注意事项 由于不同版本的 Linux 内核可能对 `/proc/stat` 文件的具体实现有所差异,在实际开发过程中需要注意兼容性问题。例如较新的发行版可能会引入额外的字段或者更改原有字段的位置定义等。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值