設前一次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利用率的各種工具。利用這些工具,你將可以查...