一, /proc 目录
Linux 系统上的 / proc 目录是一种文件系统, 即 proc 文件系统, 与其它常见的文件系统不同的是,/proc 文件系统是一个伪文件系统, 它只存在内存当中, 而不占用外存空间. 它以文件系统的方式为内核与进程提供通信的接口. 用户和应用程序可以通过 / proc 得到系统的信息, 并可以改变内核的某些参数. 由于系统的信息, 如进程, 是动态改变的, 所以用户或应用程序读取 / proc 目录中的文件时, proc 文件系统是动态从系统内核读出所需信息并提交的.
二,/proc/stat 与 top 的 cpu 信息
1. /proc/stat
该文件包含了所有 CPU 活动的信息, 该文件中的所有值都是从系统启动开始累计到当前时刻. 不同内核版本中该文件的格式可能不大一致, 以下通过实例来说明数据该文件中各字段的含义.(内核 2.6.32-431 版本)
- [root@harry proc]# cat /proc/stat
- cpu 638 0 1677 868357 2397 7 510 0 0
- cpu0 638 0 1677 868357 2397 7 510 0 0
- ...(后面省略)
第一行的数值表示的是 CPU 总的使用情况, 各数值的含义如下:
参数 | 解析(单位:jiffies) |
user(638) | 从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含 nice 值为负进程。 |
nice(0) | 从系统启动开始累计到当前时刻,nice 值为负的进程所占用的 CPU 时间 |
system(1677) | 从系统启动开始累计到当前时刻,处于核心态的运行时间 |
idle(868357) | 从系统启动开始累计到当前时刻,除 IO 等待时间以外的其它等待时间 |
iowait(2397) | 从系统启动开始累计到当前时刻,IO 等待时间 (since 2.5.41) |
irq(7) | 从系统启动开始累计到当前时刻,硬中断时间 (since 2.6.0-test4) |
softirq(510) | 从系统启动开始累计到当前时刻,软中断时间 (since 2.6.0-test4) |
steal(0) | 从系统启动开始累计到当前时刻,这是在虚拟环境中运行时在其他操作系统上花费的时间。(Since Linux 2.6.11) |
guest(0) | 从系统启动开始累计到当前时刻,在 Linux 内核的控制下为客户操作系统运行虚拟 CPU 的时间。(Since Linux 2.6.24) |
(jiffies 是内核中的一个全局变量, 用来记录自系统启动一来产生的节拍数, 在 linux 中, 一个节拍大致可理解为操作系统进程调度的最小时间片, 不同 linux 内核可能值有不同, 通常在 1ms 到 10ms 之间)
总的 cpu 时间: totalCpuTime = user + nice + system + idle + iowait + irq + softirq + stealstolen + guest.
可以看出, stat 文件中记录的时间是从开机到当前时间积累的所有 cpu 时间.
2. top 的 cpu 信息
输入 top 命令, 输出如下:
top - 00:09:46 up 2:55, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 88 total, 1 running, 87 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3%us, 0.3%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
...(省略)
Cup(s) 那行的含义如下:
0.3%us | 用户空间占用 CPU 百分比 |
0.3%sy | 内核空间占用 CPU 百分比 |
0.0%ni | 用户进程空间内改变过优先级的进程占用 CPU 百分比 |
99.3%id | 空闲 CPU 百分比 |
0.0%wa | 等待输入输出的 CPU 时间百分比 |
0.0%hi | 硬中断(Hardware IRQ)占用 CPU 的百分比 |
0.0%si | 软中断(Software Interrupts)占用 CPU 的百分比 |
0.0%st | 在虚拟环境中运行时在其他操作系统上花费的时间 |
可以看出, top 中显示的 cpu 信息都是实时的各种参数占用的 cpu 百分比.
3. /proc/stat 与 top 的 cpu 信息的联系与区别
区别:/proc/stat 文件显示的是从启动到当前时间, 各种 cup 时间的累计值; 而 top 则是显示实时的 cpu 使用情况.
联系: top 通过读取 / proc/stat 去计算 cpu 占用情况.
/proc/stat 就像汽车仪表盘上的里程数, 而 top 显示的 cpu 信息则是这辆车的速度.
三, 参考
1. Linux 中通过 / proc/stat 等文件计算 Cpu 使用率 http://www.blogjava.net/fjzag/articles/317773.html
2. Linux /proc 目录详解 https://www.cnblogs.com/DswCnblog/p/5780389.html
3. Linux: /proc/stat info is not consistent with top command https://unix.stackexchange.com/questions/413155/linux-proc-stat-info-is-not-consistent-with-top-command
4. TOP 命令 详解 CPU 查看多个核心的利用率按 1 https://www.cnblogs.com/AmilyWilly/p/7016319.html
5. Linux Top 命令解析 http://www.jb51.net/LINUXjishu/34604.html
(完)
来源: http://www.bubuko.com/infodetail-2619079.html