天天看點

Linux 手動計算CPU使用率

先聲明,本文涉及到的知識是之前搜集到的,現在整理出來分享大家,雖然打上原創的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使用率。

繼續閱讀