一、 /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使用率
3. Linux: /proc/stat info is not consistent with top command
(完)