一。單核情況下Cpu使用率的計(jì)算
基本思想
通過讀取/proc/stat 、/proc/<pid>/stat、/proc/<pid>/task/<tid>/stat以及/proc/cpuinfo這幾個(gè)文件獲取總的Cpu時(shí)間、進(jìn)程的Cpu時(shí)間、線程的Cpu時(shí)間以及Cpu的個(gè)數(shù)的信息,然后通過一定的算法進(jìn)行計(jì)算(采樣兩個(gè)足夠短的時(shí)間間隔的Cpu快照與進(jìn)程快照來(lái)計(jì)算進(jìn)程的Cpu使用率)。
1.1總的Cpu使用率計(jì)算
計(jì)算方法:
1.采樣兩個(gè)足夠短的時(shí)間間隔的Cpu快照,分別記作t1,t2,其中t1、t2的結(jié)構(gòu)均為:
(user、nice、system、idle、iowait、irq、softirq、stealstolen、guest)的9元組;
2.計(jì)算總的Cpu時(shí)間片totalCpuTime
a) 把第一次的所有cpu使用情況求和,得到s1;
b) 把第二次的所有cpu使用情況求和,得到s2;
c) s2 - s1得到這個(gè)時(shí)間間隔內(nèi)的所有時(shí)間片,即totalCpuTime = j2 - j1 ;
3、計(jì)算空閑時(shí)間idle
idle對(duì)應(yīng)第四列的數(shù)據(jù),用第二次的第四列 - 第一次的第四列即可
idle=第二次的第四列 - 第一次的第四列
6、計(jì)算cpu使用率
pcpu =100* (total-idle)/total
1.2 某一進(jìn)程Cpu使用率的計(jì)算
計(jì)算方法:
1. 采樣兩個(gè)足夠短的時(shí)間間隔的cpu快照與進(jìn)程快照,
a) 每一個(gè)cpu快照均為(user、nice、system、idle、iowait、irq、softirq、stealstolen、guest)的9元組;
b) 每一個(gè)進(jìn)程快照均為 (utime、stime、cutime、cstime)的4元組;
2. 分別根據(jù)結(jié)論****2****、結(jié)論3計(jì)算出兩個(gè)時(shí)刻的總的cpu時(shí)間與進(jìn)程的cpu時(shí)間,分別記作:totalCpuTime1、totalCpuTime2、processCpuTime1、processCpuTime2
3. 計(jì)算該進(jìn)程的cpu使用率pcpu = 100*( processCpuTime2 – processCpuTime1) / (totalCpuTime2 – totalCpuTime1) (按100%計(jì)算,如果是多核情況下還需乘以cpu的個(gè)數(shù));
實(shí)驗(yàn)過程可以使用top命令進(jìn)行驗(yàn)證
1.3 某一線程Cpu使用率的計(jì)算
計(jì)算方法:
1. 采樣兩個(gè)足夠短的時(shí)間隔的cpu快照與線程快照,
a) 每一個(gè)cpu快照均為(user、nice、system、idle、iowait、irq、softirq、stealstealon、guest)的9元組;
b) 每一個(gè)線程快照均為 (utime、stime)的2元組;
2. 分別根據(jù)結(jié)論****2****、結(jié)論4計(jì)算出兩個(gè)時(shí)刻的總的cpu時(shí)間與線程的cpu時(shí)間,分別記作:totalCpuTime1、totalCpuTime2、threadCpuTime1、threadCpuTime2
3. 計(jì)算該線程的cpu使用率pcpu = 100*( threadCpuTime2 – threadCpuTime1) / (totalCpuTime2 – totalCpuTime1) (按100%計(jì)算,如果是多核情況下還需乘以cpu的個(gè)數(shù));