Linux計算cpu使用率

2021-07-10 09:43:59 字數 3584 閱讀 3957

計算總的 cpu 使用率 totalcpuuse

1)取樣兩個足夠短的時間間隔的 cpu 快照,即讀取 /proc/stat 檔案,獲取兩個時間點的下列資料:

cput1 (user1, nice1, system1, idle1, iowait1, irq1, softirq1, stealstolen1, guest1);

cput2 (user2, nice2, system2, idle2, iowait2, irq2, softirq2, stealstolen2, guest2);

2)計算總的 cpu 時間 totalcputime:

cputime1 = user1 + nice1 + system1 + idle1 + iowait1 + irq1 + softirq1 + stealstolen1 + guest1;

cputime2 = user2 + nice2 + system2 + idle2 + iowait2 + irq2 + softirq2 + stealstolen2 + guest2;

totalcputime = cputime2 – cputime1;

3)計算 cpu 空閒時間 idlecputime:

idlecputime = idle2 – idle1;

4)計算總的 cpu 使用率 totalcpuuse:

totalcpuuse = (totalcputime – idlecputime) / totalcputime;

計算某一程序的 cpu 使用率 processcpuuse

1)取樣兩個足夠短的時間間隔的 cpu 快照和對應的程序快照,即讀取 /proc/stat 檔案,獲取兩個時間點的下列資料:

cput1 (user1, nice1, system1, idle1, iowait1, irq1, softirq1, stealstolen1, guest1);

cput2 (user2, nice2, system2, idle2, iowait2, irq2, softirq2, stealstolen2, guest2);

讀取 /proc/[pid]/stat 檔案,獲取兩個時間點的下列資料:

processt1 (utime1, stime1, cutime1, cstime1);

processt2 (utime2, stime2, cutime2, cstime2);

2)計算總的 cpu 時間 totalcputime 和程序時間 processtime:

cputime1 = user1 + nice1 + system1 + idle1 + iowait1 + irq1 + softirq1 + stealstolen1 + guest1;

cputime2 = user2 + nice2 + system2 + idle2 + iowait2 + irq2 + softirq2 + stealstolen2 + guest2;

totalcputime = cputime2 – cputime1;

processtime1 = utime1 + stime1 + cutime1 + cstime1;

processtime2 = utime2 + stime2 + cutime1 + cstime2;

processtime = processtime2 – processtime1;

3)計算該程序的 cpu 使用率 processcpuuse:

processcpuuse = processtime / totalcputime;

計算某一線程的 cpu 使用率 threadcpuuse

1)取樣兩個足夠短的時間間隔的 cpu 快照和對應的執行緒快照,即讀取 /proc/stat 檔案,獲取兩個時間點的下列資料:

cput1 (user1, nice1, system1, idle1, iowait1, irq1, softirq1, stealstolen1, guest1);

cput2 (user2, nice2, system2, idle2, iowait2, irq2, softirq2, stealstolen2, guest2);

讀取 /proc/[pid]/task/[tid]/stat 檔案,獲取兩個時間點的下列資料:

threadt1 (utime1, stime1);

threadt2 (utime2, stime2);

2)計算總的 cpu 時間 totalcputime 和執行緒時間 threadtime:

cputime1 = user1 + nice1 + system1 + idle1 + iowait1 + irq1 + softirq1 + stealstolen1 + guest1;

cputime2 = user2 + nice2 + system2 + idle2 + iowait2 + irq2 + softirq2 + stealstolen2 + guest2;

totalcputime = cputime2 – cputime1;

threadtime1 = utime1 + stime1;

threadtime2 = utime2 + stime2;

threadtime = threadtime2 – threadtime1;

3)計算該執行緒的 cpu 使用率 threadcpuuse:

threadcpuuse = threadtime / totalcputime;

2.5、多核情況下 cpu 使用率的計算

2.5.1、基本思想

首先,通過讀取 /proc/stat 檔案獲取總的 cpu 時間,讀取 /proc/[pid]/stat 獲取程序 cpu 時間,讀取 /proc/[pid]/task/[tid]/stat 獲取執行緒 cpu 時間,讀取 /proc/cpuinfo 獲取 cpu 個數。

在多核情況下計算程序或執行緒的 cpu 使用率,用上面的方式得到的通常是相對於 cpu 所有核的總共時間的佔用率,而我們通常習慣得到程序或執行緒對某乙個單核的佔用率。所以我們可以按上面的方式計算得到 cpu 佔用率,然後把結果乘上 cpu 的核數,即可得到程序或執行緒相對於乙個單核的佔用率。

2.5.2、計算總的 cpu 使用率

同 2.4.2。

2.5.3、計算某一程序的 cpu 使用率 mprocesscpuuse

1)同 2.4.3 計算某一程序的 cpu 使用率 processcpuuse;

2)讀取 /proc/cpuinfo 檔案獲取邏輯 cpu(processor) 的個數(參見 1.1): processornum

3)多核情況下該程序的 cpu 使用率 mprocesscpuuse:

mprocesscpuuse = processcpuuse * processornum;

2.5.4、計算某一線程的 cpu 使用率 mthreadcpuuse

1)同 2.4.4 計算某一線程的 cpu 使用率 threadcpuuse;

2)讀取 /proc/cpuinfo 檔案獲取邏輯 cpu(processor) 的個數(參見 1.1): processornum

3)多核情況下該執行緒的 cpu 使用率 mthreadcpuuse:

mthreadcpuuse = threadcpuuse * processornum;

控制CPU使用率

我使用的是ubuntu 14.04版本,用的是自帶的系統監視器來觀察cpu使用率的變化。1.首先來說說怎麼控制cpu使用率,當程式執行乙個死迴圈的時候,使用率就會變成100 而當程式進入idle的時候,使用率就會很低 在別的程式不啟動的情況下 那麼控制cpu使用率就是調整它idle和busy的時間比...

cpu使用率統計

cat proc stat得到 user nice system idle iowait irq softirq stealstolen guest 的9元組 再採兩個夠短的時間點,做差計算即可 cat proc pid stat讀取到 pid 6873 程序號utime 1587 該任務在使用者態...

檢視CPU使用率

rem 如果wmi服務 服務名為winmgmt 壞掉了,需要到system32 webm目錄下執行如下注釋的命令 remfor i in dll do regsvr32 s i remregsvr32 s scrcons.exe remrem regsvr32 s wbemtest.exe remr...