proc-stat

       在Linux下,CPU利用率分为用户态,系统态和空闲态,分别表示CPU处于用户态执行的时间,系统内核执行的时间,和空闲系统进程执行的时间,三者之和就是CPU的总时间,当没有用户进程、系统进程等需要执行的时候,CPU就执行系统缺省的空闲进程。从平常的思维方式理解的话,CPU的利用率就是非空闲进程占用时间的比例,即CPU执行非空闲进程的时间 / CPU总的执行时间。

       比如:

 usernicesystem idle iowaitirqsoftirq
cpu79553925209639982133096096
cpu0213921155332247984798055
cpu1187275035479250038729019
cpu2209631415508248286876012
cpu318469163464325190469109

        第一行是总和,如果CPU是多核(包括超线程)则会有cpu 0 ~ cpu n

 

user从系统启动开始累计到当前时刻,用户态的CPU时间,不包含nice值为负进程。
nice从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间
system 从系统启动开始累计到当前时刻,核心时间
idle从系统启动开始累计到当前时刻,除IO等待时间以外其它等待时间
iowait 从系统启动开始累计到当前时刻,IO等待时间
irq 从系统启动开始累计到当前时刻,硬中断时间
Softirq从系统启动开始累计到当前时刻,软中断时间

 

 

       CPU的即时利用率的计算公式:

       CPU在t1到t2时间段总的使用时间 = ( user2+ nice2+ system2+ idle2+ iowait2+ irq2+ softirq2) - ( user1+ nice1+ system1+ idle1+ iowait1+ irq1+ softirq1)

       CPU在t1到t2时间段空闲使用时间 = (idle2 - idle1)

       CPU在t1到t2时间段即时利用率 =  1 - CPU空闲使用时间 / CPU总的使用时间

 

 

### /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、付费专栏及课程。

余额充值