最初是想參考網上的文檔完成自己的功能,卻由于網上的解釋不全,自己看man文檔。讀了文檔后發(fā)現網上文檔的部分解決是存在問題的,遂將這里的相關信息進行梳理以作備用,并分享給大家。希望也能對大家有幫助。
/proc/stat中包含系統(tǒng)啟動以來的很多系統(tǒng)和內核的統(tǒng)計信息,平時大家比較關心的比如包括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指標 | 含義 | 時間單位 | 備注 |
|---|---|---|---|
| user | 用戶態(tài)時間 | jiffies | 一般/高優(yōu)先級,僅統(tǒng)計nice<=0 |
| nice | nice用戶態(tài)時間 | jiffies | 低優(yōu)先級,僅統(tǒng)計nice>0 |
| system | 內核態(tài)時間 | jiffies | |
| idle | 空閑時間 | jiffies | 不包含IO等待時間 |
| iowait | I/O等待時間 | jiffies | 硬盤IO等待時間 |
| irq | 硬中斷時間 | jiffies | |
| softirq | 軟中斷時間 | jiffies | |
| steal | 被盜時間 | jiffies | 虛擬化環(huán)境中運行其他操作系統(tǒng)上花費的時間(since Linux 2.6.11) |
| guest | 來賓時間 | jiffies | 操作系統(tǒng)運行虛擬CPU花費的時間(since Linux 2.6.24) |
| guest_nice | nice來賓時間 | jiffies | 運行一個帶nice值的guest花費的時間(since Linux 2.6.33) |
說明:
1、1 jiffies = 0.01s = 10ms
2、常用計算等式:CPU時間 = user + system + nice + idle + iowait + irq + softirq
3、man手冊中iowait有單獨說明,iowait時間是不可靠值,具體原因如下:
1)CPU不會等待I/O執(zhí)行完成,而iowait是等待I/O完成的時間。
當CPU進入idle狀態(tài),很可能會調度另一個task執(zhí)行,所以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 # 此處較多冗余信息,簡化之
# 這行給出中斷的信息,第一個為自系統(tǒng)啟動以來,發(fā)生的所有的中斷的次數
# 然后每個數對應一個特定的中斷自系統(tǒng)啟動以來所發(fā)生的次數。
ctxt 68533835 #自系統(tǒng)啟動以來CPU發(fā)生的上下文交換的次數
btime 1528905555 #系統(tǒng)啟動到現在的時間,單位為秒(s)
processes 318904 #自系統(tǒng)啟動以來所創(chuàng)建的任務的個數目
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"