最初是想参考网上的文档完成自己的功能,却由于网上的解释不全,自己看的男人文档。读了文档后发现网上文档的部分解决是存在问题的,遂将这里的相关信息进行梳理以作备用,并分享给大家。希望也能对大家有帮助。
的/ proc / STAT中包含系统启动以来的很多系统和内核的统计信息,平时大家比较关心的比如包括CPU运行情况,中断情况,启动时间,上线文切换次数,运行中的进程等信息都在其中。
一,文件全貌
# Linux下查看/proc/stat的具体信息如下
[root@WSC-31-2 ~]# cat /proc/stat
cpu 60382 1 80032 198934063 2349 0 109 0 0 0
cpu0 2405 0 2084 4140924 682 0 6 0 0 0
... # 此处较多冗余信息,简化之
cpu47 200 0 134 4147222 10 0 0 0 0 0
intr 33622492 64 ... 0 0 0 0 # 此处较多冗余信息,简化之
ctxt 68533835
btime 1528905555
processes 318904
procs_running 1
procs_blocked 0
softirq 16567860 0 3850777 8555 5448802 116727 0 1 3577293 1290 3564415
这里将上述内容划分成几个模块进行分析
二,字段含义分析
name user nice system idle iowait irrq softirq steal guest guest_nice
cpu 60382 1 80032 198934063 2349 0 109 0 0 0
cpu0 2405 0 2084 4140924 682 0 6 0 0 0
... # 此处较多冗余信息,简化之
cpu47 200 0 134 4147222 10 0 0 0 0 0
CPU指标 | 含义 | 时间单位 | 备注 |
---|---|---|---|
用户 | 用户态时间 | 的jiffies | 一般/高优先级,仅统计好的<= 0 |
不错 | 漂亮的用户态时间 | 的jiffies | 低优先级,仅统计很好> 0 |
系统 | 内核态时间 | 的jiffies | |
闲 | 空闲时间 | 的jiffies | 不包含IO等待时间 |
IOWAIT | I / O等待时间 | 的jiffies | 硬盘IO等待时间 |
IRQ | 硬中断时间 | 的jiffies | |
软中断 | 软中断时间 | 的jiffies | |
偷 | 被盗时间 | 的jiffies | 虚拟化环境中运行其他操作系统上花费的时间(自Linux 2.6.11开始) |
客人 | 来宾时间 | 的jiffies | 操作系统运行虚拟CPU花费的时间(自Linux 2.6.24开始) |
guest_nice | 漂亮的来宾时间 | 的jiffies | 运行一个带nice值的guest花费的时间(自Linux 2.6.33开始) |
1、1 jiffies = 0.01s = 10ms
2、常用计算等式:CPU时间= user + system + nice + idle + iowait + irq + softirq
3、man手册中io wait有单独说明,iowait时间是不可靠值,具体原因如下:
1)CPU不会等待I / O执行完成,而Iowait是等待I / O完成的时间。
当CPU进入空闲状态时,很可能会调度另一个任务执行,所以iowait计算时间偏小;
2)多核CPU中,iowait的计算并非某个核,因此计算每一个cpu的iowait非常困难
3)这个值在某些情况下会减少
更多信息可以通过man手册查看: http ://man7.org / linux /man-pages/man5/proc.5.html
intr 33622492 64 ... 0 0 0 0 # 此处较多冗余信息,简化之
# 这行给出中断的信息,第一个为自系统启动以来,发生的所有的中断的次数
# 然后每个数对应一个特定的中断自系统启动以来所发生的次数。
ctxt 68533835 #自系统启动以来CPU发生的上下文交换的次数
btime 1528905555 #系统启动到现在的时间,单位为秒(s)
processes 318904 #自系统启动以来所创建的任务的个数目
procs_running 1 #当前运行队列的任务的数目
procs_blocked 0 #当前被阻塞的任务的数目
softirq 16567860 0 3850777 8555 5448802 116727 0 1 3577293 1290 3564415
# 此行显示所有CPU的softirq总数
# 第一列是所有软件和每个软件的总数
# 后面的列是特定softirq的总数
技巧
[root@WSC-31-2 ~]# cat /proc/uptime
74495.52 3570301.60
# 第一个参数是开机到现在的时间,单位为秒(s)
# 第二个参数是开机到现在CPU空闲时间,单位为秒(s)
# 通过下列语句,计算出当前时间
ut=`cut -d' ' -f1 </proc/uptime`
ts=`date +%s`
date -d"70-1-1 + $ts sec - $ut sec + 74495.52 sec" +"%F %T"