2016-08-17 60 views
0

Thisthis link我正在嘗試計算CPU利用率,但未按預期進行。電流和prev之間(即 我的應用程序是顯示CPU利用率爲3%和頂部被示出99%以上。)如何使用「proc」文件系統計算Linux中所有正在運行的進程的CPU利用率?

我試圖下面方法,

usage=100*(((utime_ticks_current + cutime_ticks_current + stime_ticks_current + cstime_ticks_current) - (utime_ticks_prev + cutime_ticks_prev + stime_ticks_prev + cstime_ticks_prev))/(long)(total_cpu_time_current - total_cpu_time_prev)) 

here, 
utime_ticks = /proc/pid/stat -> 14th value 
stime_ticks = /proc/pid/stat -> 15th value 
cutime_ticks = /proc/pid/stat -> 16th value 
cstime_ticks = /proc/pid/stat -> 17th value 

total_cpu_time = /proc/stat -> sum of all 10 values 

時差爲1秒。

此外,我手動檢查所有變量的所有值都是正確的。

請注意,我分別嘗試了同樣的事情「STIME,cstime」和「UTIME,cutime」

我認爲在我正在計算的方式有些問題,

燦任何人都請幫忙?


我只找到解決方案,我只需要將該值與可用的Cores/CPU總數相乘即可。


+0

那麼,你想獲得單個進程的CPU使用率,或一段時間內的平均CPU使用率? – Mirakurun

+0

我想計算在系統上運行的所有進程的CPU利用率(%) – Chirag

回答

0

我可以給你一部分我用於我的cpu利用率服務器的代碼。這是非常準確的。

long double a[4], b[4], loadavg; 
FILE *fp; 
char dump[50] = {0}; 
memset(dump, 0, 50); 

fp = fopen("/proc/stat","r"); 
fscanf(fp,"%*s %Lf %Lf %Lf %Lf",&a[0],&a[1],&a[2],&a[3]); 
fclose(fp); 
sleep(1); 

fp = fopen("/proc/stat","r"); 
fscanf(fp,"%*s %Lf %Lf %Lf %Lf",&b[0],&b[1],&b[2],&b[3]); 
fclose(fp); 

loadavg = ((b[0]+b[1]+b[2]) - (a[0]+a[1]+a[2]))/((b[0]+b[1]+b[2]+b[3]) - (a[0]+a[1]+a[2]+a[3])); 
loadavg=loadavg*100; 
sprintf(dump, "%Lf\n",loadavg); 
long double used; 
+0

謝謝,但我想計算每個進程的CPU利用率,我認爲上面的代碼將爲每個核心提供CPU利用率。 – Chirag

相關問題