先聲明,本文涉及到的知識是之前搜集到的,現在整理出來分享大家,雖然打上原創的tag,但還是向原創緻敬!如果涉及到侵權的問題,請聯系我,我會及時更改!
目前linux統計cpu使用率時,所用到的資訊,大多數是從 /proc/stat中獲得,其中資訊大緻如下:
打開/proc/stat 後會看到類似如下資訊,不同Linux略微會有不一樣。
cpu 432661 13295 86656 422145968 171474 233 5346
cpu0 123075 2462 23494 105543694 16586 0 4615
cpu1 111917 4124 23858 105503820 69697 123 371
cpu2 103164 3554 21530 105521167 64032 106 334
cpu3 94504 3153 17772 105577285 21158 4 24
intr 1065711094 1057275779 92 0 6 6 0 4 0 3527 0 0 0 70 0 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7376958 0 0 0 0 0 0 0 1054602 0 0 0 0 0 0 0 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 19067887
btime 1139187531
processes 270014
procs_running 1
procs_blocked 0
輸出解釋
CPU 以及CPU0、CPU1、CPU2、CPU3每行的每個參數意思(以第一行為例)為:
user (432661) 從系統啟動開始累計到目前時刻,使用者态的CPU時間(機關:jiffies) ,不包含 nice值為負程序。1jiffies=0.01秒
nice (13295) 從系統啟動開始累計到目前時刻,nice值為負的程序所占用的CPU時間(機關:jiffies)
system (86656) 從系統啟動開始累計到目前時刻,核心時間(機關:jiffies)
idle (422145968) 從系統啟動開始累計到目前時刻,除硬碟IO等待時間以外其它等待時間(機關:jiffies)
iowait (171474) 從系統啟動開始累計到目前時刻,硬碟IO等待時間(機關:jiffies) ,
irq (233) 從系統啟動開始累計到目前時刻,硬中斷時間(機關:jiffies)
softirq (5346) 從系統啟動開始累計到目前時刻,軟中斷時間(機關:jiffies)
其他為:
“intr” 這行給出中斷的資訊,第一個為自系統啟動以來,發生的所有的中斷的次數;然後每個數對應一個特定的中斷自系統啟動以來所發生的次數。
“ctxt” 給出了自系統啟動以來CPU發生的上下文交換的次數。
“btime” 給出了從系統啟動到現在為止的時間,機關為秒。
"processes" (total_forks) 自系統啟動以來所建立的任務的個數目。
“procs_running” 目前運作隊列的任務的數目。
“procs_blocked” 目前被阻塞的任務的數目。
(以下每個值的2和1分别是2次擷取的這個值,這裡的cpu使用率就是這2者時間之間的平均值)
對于一個cpu的使用率,目前常見的計算方式是
user_pass = user2 - user1
system_pass = system2 - system1
idle_pass = idle2 - idle1
cpu使用率=(user_pass + system_pass)*100%/(user_pass + system_pass + idle_pass)
大家也會發現,這和top顯示的cpu使用率不同,這又是為什麼呢?
top上的cpu使用率,大緻算法如下
CPU總時間2=user2+system2+nice2+idle2+iowait2+irq2+softirq2
CPU總時間1=user1+system1+nice1+idle1+iowait1+irq1+softirq1
使用者cpu使用率 = user_pass * 100% / (CPU總時間2 - CPU總時間1)
核心cpu使用率 = system_pass * 100% / (CPU總時間2 - CPU總時間1)
總的cpu使用率= 使用者cpu使用率 + 核心cpu使用率
這2者,誰優誰劣?
對于第一種,其計算出來的 = 100% - 系統空閑的百分率。
對于第二鐘,這應該是真正意義上的 cpu使用率。