Linux系統中的CPU利用率

2021-08-10 00:19:13 字數 3999 閱讀 7912

設前一次cpu執行的總時間長期為jiffies_pr,當前cpu執行總時間為jiffies_cur,前一次監控使用者進行程占用的時間為jiffies_user_pr,當前使用者程序占用時間為jiffies_user_cur,則 pe

rcen#br>br#=jif

fies

_use

r_cu

r−ji

ffie

s_us

er_p

rjif

fies

_cur

−jif

fies

_pr

為更加詳細的分析cpu的負載情況,linux作業系統對cpu的使用為成8進行處理。如下表所示:

類別說明

cputime_user

普通使用者程序所占用時間

cputime_nice

高優先順序使用者程序所占用時間

cputime_system

核心系統所占用時間

cputime_softirq

軟中斷所占用時間

cputime_idle

cpu空閒時間

cputime_iowait

io等待時間

cputime_steal

hypervisor執行占用時間

cputime_guest

虛擬機器執行占用時間

cputime_guest_nice

高優化級虛擬級程序所占用時間

而cpu總體執行時間為: to

talj

iffi

es=c

pu_u

ser+

cpu_

nice

+cpu

_sys

+cpu

_idl

e+cp

u_io

wait

+cpu

_har

dirq

+cpu

_ste

al+c

puso

ftir

q linux核心通過/proc/stat輸出cpu的統計資訊。統計資訊體現了從系統啟動到當前時間的系統各類負載的計數情況。iostat之類的統計程式首先從這裡獲取統計資訊,進行百分比的換算,然後展現出來。

[root@localhost sysstat]# cat /proc/stat 

cpu 19528

17255646

34700894

153440

01002400

0cpu0

19528

17255646

34700894

153440

01002400

0intr 13531733

1291000

0000

0000

1550

0340101

433611000

195598

065114800

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

0000

ctxt 15768816

btime 1508742029

processes 53214

procs_running 2

procs_blocked 0

softirq 10080346

13478603

70015

4532140

745643

05012900

1203815

stat資訊體現的是cpu自啟動到當前時刻的各類使用系統資訊的計數。

- cpu及cpu{0,cpu_nr}:記錄cpu在各類作業裡面使用的時間。從左到右依次是user、nice、system、idle、iowait、irq、softirq、steal、guest、guest_nice

- ctx:上下文切換時間

- btime:啟動時間,以秒為單位

- processes:程序數,當用fork或者clone函式建立程序時,此計數將累加

- procs_running:正在執行的程序數

- procs_blocked:由於等待io而被阻塞的程序數

- softirq:軟體中斷數量。第乙個數值表示總的軟中斷數量。後續的數值表示每個軟中斷的數量

ctx、btime、proceses及以後的資訊比較容易理解。系統在執行到相應的操作,對系統計數並儲存到記憶體即可以。

cpu狀態資訊的統計稍微複雜。

系統啟動時,每個cpu均建立乙個tick_device(時鐘裝置)用於週期性的執行系統的監控。此裝置以hz(預設配置為100)為單位執行週期性的檢查函式。這個檢查最終呼叫account_process_tick對cpu的執行時間進行分類計數。其計數粒度為時間鐘裝置執行的週期(pe

riod

=1s/

hz=10

ms)。系統首先計算在監控週期內虛擬機器所占用的時間,如果虛擬機器占用的時間超過乙個週期的時間話,說明cpu被虛擬機器占用,這個週期的時間長度會累加到steal中。否則的話,進一步分配period - steal的時間長度。如果當前執行的是使用者空間型別則累加到user上。如果是系統核心程序,進一步判斷是否是中斷例程,如果是的話累加到相應的中斷計數上,否則,認為是累加到system值。

系統即不是使用者執行緒在執行也不是核心執行緒在執行,那麼,cpu當前是空閒的。需要進一步分析空閒的原因是沒事幹,還是有事幹不了(等待io)。如果這個時候有io在等待執行,就認為cpu是有事幹不了,等待io的進行,將此週期增加到iowait上。否則,cpu確實是閒著。

由上述的過程,設想,在統計週期內,系統從使用者空間切的到核心空間,系統這乙個週期實際上是計算在system這個值上了。我們可以得出乙個結論:cpu的時間統計是有一定的誤差的。每次統計的誤差均會小於統計週期。這個誤差不影響我們在文件開始說的,cpu統計的指導意義,即不影響我們判斷cpu當前是空閒還是繁忙,哪類操作占用的cpu比較多。

cpu統計的另外乙個誤差還體現的iowait上。統計例程將當前有io等待且cpu沒有執行的情況定義為iowait的值,並非直接判斷出這個cpu在等待io。這兩者的區別比較小。cpu是否在等待io是通過nr_iowait來判斷的。這個值是通過在系統排程過程中被設定,且統計塊io的情況。iowait高代表著系統持續有io執行,且cpu空閒,並不代表磁碟效能弱。因此,當iowait過高時,還需要根據其他參考比如硬碟的頻寬、響應時間等等進行判斷是否真是塊io是乙個瓶頸。相反的,當前cpu利用率非常高,而某個程序確實由於在等待io而被失眠,iowait體現不出來。

cpu利用率 CPU利用率錯誤

cpu利用率 cpu利用率是每個人用來衡量處理器效能的指標。netflix的高階效能架構師布倫丹 格雷格 brendan gregg 在第16屆年度南加州linux expo scale 上稱其為 五分鐘公共服務公告 但 cpu卻是一種誤導性的衡量指標,說明處理器的實際繁忙程度。布倫丹在他的閃電演講...

如何檢視linux系統CPU利用率

當linux系統被某乙個程序占用時,它無法處理其它程序的請求。餘下等待處理的請求必須等到cpu空閒。這 個時候,系統會變得很慢。以下命令將能夠幫助你識別cpu的利用率,從而解決與cpu相關的問題。查明cpu利用率是一項重要的任務。linux系統附帶了報告cpu利用率的各種工具。利用這些工具,你將可以...

如何檢視linux系統CPU利用率

當linux系統被某乙個程序占用時,它無法處理其它程序的請求。餘下等待處理的請求必須等到cpu空閒。這個時候,系統會變得很慢。以下命令將能夠幫助你識別cpu的利用率,從而解決與cpu相關的問題。查明cpu利用率是一項重要的任務。linux系統附帶了報告cpu利用率的各種工具。利用這些工具,你將可以查...