これはへのリンクですこれ質問。
これを実行すると、top
次のような結果が得られます。
pidは3038
18%のCPUを使用しますが、実行中のとき
結果は5.5%である。そして、この数字は時間が経っても変わらないようです(つまり、後で同じコマンドを実行するとき)。
このps
コマンドはどのようにCPU使用率を平均化しますか?
答え1
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
次のようにCPU使用率を計算します。
稼働時間 = システムが実行される合計時間。 ps_time =開始後のプロセス開始時間(秒単位)。 pu_time = プロセスが CPU を使用した合計時間です。 ;;;プロセスが実行された時間(秒): 秒 = 稼働時間 - ps_time ;;用法: cpu_usage = pu_time * 1000/秒 印刷: cpu_usage/10". CPU 使用率 % 10
例: 稼働時間 = 344,545 ps_time = 322,462 pu_time = 3,383 秒 = 344,545 - 322,462 = 22,083 CPU使用率=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/
。
CPU使用量を計算するときは、ps
次の2つのファイルを使用してください。
/proc/uptime システムの稼働時間 (秒) およびアイドル・プロセスに費やされた時間 (秒)。 /proc/[PID]/stat プロセスに関するステータス情報です。
- 最初の値を使用
uptime
します(稼働時間)。 - 以下
[PID]/stat
を使用してください。
#name説明 14 utimeユーザーコードで費やしたCPU時間(紙幣単位で測定) カーネルコードに費やされた15stime CPU時間(紙幣単位で測定) サブプロセス時間を含むユーザーコードで消費された16のCPU時間 17 cstimeサブプロセス時間を含むカーネルコードで費やされたCPU時間 22 starttimeプロセスが開始された時間(jiffies)
ㅏ瞬間時計がカチカチ音です。したがって、sysconf(_SC_CLK_TCK)
システムのヘルツ(1秒あたりのティック)を得るために、さまざまな方法を使用します。最後に、他のオプションをすべて使用した後、代替手段として100を使用します。
したがって、utime
1234でHertzが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%
計算する「現在の」psとしてロード
(多少?)怪しい試みですが大丈夫です。やってみよう
提供された時間を使用ps
し、それに応じてCPU使用量を計算できます。考えてみるとかなり役に立つかもしれませんが、いくつかの制限があります。
これは、長期間にわたってCPU使用率を計算するのに役立ちます。つまり、plugin-container
Firefox 関連タスクの実行中に Firefox の平均 CPU 負荷を監視しようとします。
次の出力を使用して:
$ ps -p -o CPU 時間、時間
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
overを使用しています。etimes
また、「楽しい」のために%cpuを追加しました。 IE 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
この間、プロセスはCPUを38%使用しました。
コードを見てください
それがどのように完了したのかを知り、ps
Cについて少し知りたいのなら、それをやってください(Gnome Debain deriavntを実行しているようです)。コードはコメントなどに対する良い態度を持っています。
apt-get source procps
cd procps*/ps
vim HACKING
答え2
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).