回答:
man ps
でNOTES
セクション。
CPU usage is currently expressed as the percentage of time spent running
during the entire lifetime of a process. This is not ideal, and it does not
conform to the standards that ps otherwise conforms to. CPU usage is
unlikely to add up to exactly 100%.
そして、あなたは知っていると思いますが、あなたもすることができます:
top -p <PID>
編集:他の回答に対するコメントに関して;
「うーん、PSからそれ(インスタントCPUパーセンテージ)を取得する方法がわからない」
簡単な答え:できません。
写真から車の速度を計算するように頼むようなものです。
一方でtop
監視ツールである、ps
スナップショットツールです。次のように考えてください。任意の時点で、プロセスはCPUを使用するかどうかを決定します。したがって、その正確な瞬間に0%または100%の負荷があります。
ps
付与:即時のCPU使用率を与える必要がある場合、0%または100%のいずれかになります。
top
一方、ポーリング数を保持し、時間の経過とともに負荷を計算します。
ps
現在の使用状況を指定することもできますが、データを複数回読み取り、各読み取りの間にスリープする必要があります。そうではありません。
ps
次の方法でCPU使用率を計算します。
稼働時間=システムが稼働している合計時間。 ps_time =ブートからの秒数で測定されたプロセス開始時間。 pu_time =プロセスがCPUを使用している合計時間。 ;; 秒プロセスが実行されています: 秒=稼働時間-ps_time ;; 使用法: cpu_usage = pu_time * 1000 /秒 print:cpu_usage / 10 "。" cpu_usage%10
例: 稼働時間= 344,545 ps_time = 322,462 pu_time = 3,383 秒= 344,545-322,462 = 22,083 cpu_usage = 3,383 * 1,000 / 22,083 = 153 印刷:153/10 "。" 153%10 => 15.3
したがって、印刷される数字は、プロセスがその存続期間中にCPUを使用していた時間です。上記の例のように。その寿命の15.3%でそうしました。84,7%の時間で、CPUのバグが発生していません。
ps
同様にtop
、/proc/
-またはプロセス情報擬似ファイルシステムに保存されているファイルのデータを使用します。
ルートのいくつかのファイルに/proc/
は、システムの全体的な状態に関するさまざまな情報が含まれています。さらに、各プロセスには、/proc/<PID>/
プロセス固有のデータが保存される独自のサブフォルダーがあります。そのため、たとえば、質問のプロセスにはのフォルダがありました/proc/3038/
。
ps
CPU使用率を計算するとき、2つのファイルを使用します。
/ proc / uptimeシステムの稼働時間(秒)、およびアイドルプロセスに費やされた時間(秒)。 / proc / [PID] / statプロセスに関するステータス情報。
uptime
それは最初の値(使用稼働時間を)。[PID]/stat
以下から使用します。#名前説明 jiffiesで測定されたユーザーコードで費やされた14 utime CPU時間 カーネルコードで消費される15 stime CPU時間(jiffiesで測定) 子からの時間を含むユーザーコードで費やされた16キューティーCPU時間 カーネルコードで費やされた17 cstime CPU時間(子からの時間を含む) 22 starttimeプロセスが開始された時間(jiffiesで測定)
jiffieは、クロックティックです。そのため、さらに、さまざまな方法を使用sysconf(_SC_CLK_TCK)
して、システムのヘルツ(1秒あたりのティック数)を取得します。最終的には、他のオプションを使い果たした後、フォールバックとして100を使用します。
その場合はutime
1234ヘルツは、100です。
seconds = utime / Hertz = 1234 / 100 = 12.34
実際の計算は以下によって行われます:
total_time = utime + stime
IF include_dead_children
total_time = total_time + cutime + cstime
ENDIF
seconds = uptime - starttime / Hertz
pcpu = (total_time * 1000 / Hertz) / seconds
print: "%CPU" pcpu / 10 "." pcpu % 10
例(カスタムBashスクリプトからの出力):
$ ./psw2 30894
System information
uptime : 353,512 seconds
idle : 0
Process information
PID : 30894
filename : plugin-containe
utime : 421,951 jiffies 4,219 seconds
stime : 63,334 jiffies 633 seconds
cutime : 0 jiffies 0 seconds
cstime : 1 jiffies 0 seconds
starttime : 32,246,240 jiffies 322,462 seconds
Process run time : 31,050
Process CPU time : 485,286 jiffies 4,852 seconds
CPU usage since birth: 15.6%
これは(ちょっと?)日陰の努力ですが、OKです。やってみましょう。
提供された時間を使用しps
、これからCPU使用率を計算できます。それについて考えるとき、いくつかの制限がありますが、実際にはかなり便利です。
これは、長時間にわたるCPU使用率を計算するのに役立ちます。つまりplugin-container
、Firefoxに関連するタスクを実行しながら、Firefoxの平均CPU負荷を監視したいとします。
以下からの出力を使用することにより:
$ ps -p -o cputime、etimes
CODE HEADER DESCRIPTION
cputime TIME cumulative CPU time, "[DD-]hh:mm:ss" format. (alias time).
etime ELAPSED elapsed time since the process was started, [DD-]hh:]mm:ss.
etimes ELAPSED elapsed time since the process was started, in seconds.
このサンプルでは、計算上、少しわかりやすくするために使用etime
しetimes
ます。また、「楽しい」ために%cpuを追加します。すなわち、bashスクリプトでは、明らかに使用しますetimes
-または、よりよく読む/proc/<PID>/
など。
Start:
$ ps -p 30894 -o %cpu,cputime,etime,etimes
%CPU TIME ELAPSED ELAPSED
5.9 00:13:55 03:53:56 14036
End:
%CPU TIME ELAPSED ELAPSED
6.2 00:14:45 03:56:07 14167
Calculate times:
13 * 60 + 55 = 835 (cputime this far)
3 * 3,600 + 53 * 60 + 56 = 14,036 (time running this far)
14 * 60 + 45 = 885 (cputime at end)
3 * 3,600 + 56 * 60 + 7 = 14,167 (time running at end)
Calculate percent load:
((885 - 835) / (14,167 - 14,036)) * 100 = 38
プロセスは、この期間中に38%の時間CPUを使用していました。
あなたps
がそれをどのように知りたいのか、そして少しのC を知りたいのであれば、あなたはGnome Debain deriavntを実行しているように見えます)-コメントなどに関するコードの素晴らしい態度:
apt-get source procps
cd procps*/ps
vim HACKING
man top
%CPU -- CPU usage
The task's share of the elapsed CPU time since the last screen update, expressed as a percentage of total CPU time. In a true SMP environment, if 'Irix
mode' is Off, top will operate in 'Solaris mode' where a task's cpu usage will be divided by the total number of CPUs. You toggle 'Irix/Solaris' modes
with the 'I' interactive command.
man ps
%cpu %CPU cpu utilization of the process in "##.#" format. Currently, it is the CPU time used divided by the time the process has been running (cputime/realtime ratio), expressed as a percentage. It will not add up to 100% unless you are lucky. (alias pcpu).
ps
top -p 3343 -n1 | awk '/ R /{print $10}'
awk
:INGのためpid
のように、より良い仕事をtop -p 3343 -n1 | awk '/ 3343 /{print $10}'
top -p $PID -n1 | awk '{if (NR ==8) print $9 }'
top
と継続的な監視で更新するかps
、現在のCPU負荷で「by by delay」というスナップショットで更新する場合があります。