2012-02-10 106 views
126

我想知道如何獲得系統CPU使用率並將其顯示在%(在bash中)例如如何在Linux上獲得整體CPU使用率(例如57%)

輸出示例:

57% 

如果情況有超過1個核心,這將是很好,如果平均比例可以計算出

+1

top命令是不夠的? – JuSchz 2012-02-10 14:31:31

+1

@julesanchez該值需要在其他地方傳送,因此它必須是int – user1199739 2012-02-10 14:34:06

+0

做頂部> myfile.txt並在後處理中應用您的過濾器,不好嗎? – JuSchz 2012-02-10 14:35:56

回答

32

sysstat包嘗試mpstat

> sudo apt-get install sysstat 
Linux 3.0.0-13-generic (ws025) 02/10/2012 _x86_64_ (2 CPU) 

03:33:26 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 
03:33:26 PM all 2.39 0.04 0.19 0.34 0.00 0.01 0.00 0.00 97.03 

然後一些cutgrep解析您需要的信息:

mpstat | grep -A 5 "%idle" | tail -n 1 | awk -F " " '{print 100 - $ 12}'a 
+0

我不相信這顯示總的CPU – user1199739 2012-02-10 14:36:20

+0

我會說它100%空閒,這是總CPU使用率(%) – 2012-02-10 14:38:40

+0

這是百分比「不」使用。這個答案是好的,直到grep | tail | awk part ... – jordanm 2012-02-10 14:47:30

97

看看cat /proc/stat

grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage "%"}'

編輯請閱讀評論複製粘貼或使用此對任何嚴肅的工作之前。這沒有經過測試也沒有使用過,對於那些不想安裝實用程序或者在任何發行版中工作的人來說,這是一個想法。有人認爲你可以「安裝」任何東西。

+0

我不建議在bash中解析那些已經有許多實用工具的工具。 – jordanm 2012-02-10 14:53:47

+9

但是你必須像上面推薦的那樣安裝mpstat。許多人沒有這種靈活性。 cat/proc/stat然後pipe比你推薦的mpstat容易得多。 – vimdude 2013-03-22 13:13:11

+9

+1不明白爲什麼解析另一個實用程序比解析'/ proc/stat'更好 – BroSlow 2014-02-26 18:31:02

77

你可以試試:

top -bn1 | grep "Cpu(s)" | \ 
      sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \ 
      awk '{print 100 - $1"%"}' 
+9

每次運行此命令時,我都會得到完全相同的輸出'32.7%')。 – alanaktion 2013-07-18 01:58:03

+12

當我使用'top -bn2'時會給出更準確的結果,但這需要很長時間。從我讀過的內容來看,這似乎是獲得準確結果的唯一方法。 – alanaktion 2013-07-18 02:10:35

+6

'top -bn1'在我的FC20系統上似乎非常不準確。 'top -bn2'似乎運作良好。 – Carpetsmoker 2014-02-19 00:58:49

9

編輯:我注意到,在其他用戶的回覆%閒置了12場,而不是場11. AWK已經更新到佔%閒段是可變的。

這應該得到你所需要的輸出:

mpstat | awk '$3 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $3 ~ /all/ { print 100 - $field }' 

如果你想要一個簡單的整數舍入,您可以用printf:

mpstat | awk '$3 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $3 ~ /all/ { printf("%d%%",100 - $field) }' 
+2

'mpstat 1 1 | awk'$ 3〜/ CPU/{for(i = 1; i <= NF; i ++){if($ i〜/%idle /)field = i}} $ 3〜/ all/{printf(「%d」, 100 - $ field)}''對我很好,謝謝。注意mpstat 1 1以確保CPU使用率在一秒內被採樣 – chrishiestand 2015-06-07 06:28:48

18

還不如扔了我的解決方案的實際響應,這是靈感來自彼得Liljenberg的:

$ mpstat | awk '$12 ~ /[0-9.]+/ { print 100 - $12"%" }' 
0.75% 

這將使用awk打印出100減去第12個字段(空閒),後面有一個百分號。 awk只會對第12行只有數字和點的行($12 ~ /[0-9]+/)執行此操作。

+12

運行「mpstat 2 1 | ...」更好,以便它顯示最近1秒的統計數據。否則,默認情況下,mpstat自開始就顯示統計信息,並且隨着時間的推移不會有太大變化 – Sarang 2013-07-19 19:56:30

+1

「mpstat | awk'$ 12〜/[0-9.]+/ {print 100 - $ 11」%「}'」我。 – AloneInTheDark 2014-02-26 09:05:48

+0

@Sarang非常感謝你!最後,我可以得到'conky'顯示的結果。不幸的是,這條線很慢,幾乎需要一秒鐘才能執行。 – syntaxerror 2014-09-15 01:35:42

相關問題