2016-08-17 3 views
0

からThisthis link CPU使用率を計算しようとしていますが、期待通りには出ていません。 (すなわち 3%トップは99%を示しているように私のアプリケーションがCPU使用率を示している。)"proc"ファイルシステムを使用して、Linuxで実行中のすべてのプロセスのCPU使用率を計算する方法は?

Iの方法の下にしようとしている、現在および前の間

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」

に対して個別に同じことをしようとしたことに注意してください、

ことができます誰も助けてください?


解決策が見つかりましたが、利用可能なコア/ CPUの総数に値を掛けなければなりませんでした。


+0

だから、あなたは一度のプロセスで平均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

関連する問題