Ubuntu 12.04.1 Linuxを使用しています。プロセスのC
コマンドの%CPU
とps
の出力形式に違いがあるようです。 ps
のマニュアルページには明確に記載されていません。
マニュアルページは言う:
CODE HEADER DESCRIPTION
%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).
c C processor utilization. Currently, this is the integer
value of the percent usage over the lifetime of the
process. (see %cpu).
したがって、基本的には同じである必要がありますが、そうではありません。
$ ps aux | head -1
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
$ ps aux | grep 32473
user 32473 151 38.4 18338028 6305416 ? Sl Feb21 28289:48 ZServer -server -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./log
$ ps -ef | head -1
UID PID PPID C STIME TTY TIME CMD
$ ps -ef | grep 32473
user 32473 32472 99 Feb21 ? 19-15:29:50 ZServer -server -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./log
上の図は、同時に2%のCPU使用率を示しています。 「top」は現在のCPU使用率を示し、ps
はプロセスの存続期間中のCPU使用率を示しています。
寿命の定義は、これら2つの形式オプションでは多少異なると思います。
%cpu列とC列はほぼ同じですが、まったく同じではありません。 ps/output.cのpsのソースを見ると、pr_cとpr_cpuの違いがわかります
推測できるように、Cは%cpuの整数値です。奇妙な違いは、Cが最大99にクランプされているのに対し、%cpuはクランプされていないことです(%cpuのチェックはありますが、フォーマットがxx.x%からxxx%に変更されるだけです)。
今、私はなぜCがこのクランプを持っているのか本当にわかりません。それは少し恣意的です。 procps 3.2.7(2006)以降に存在しているので、おそらくシングルCPUの時代からのものだった
注:私はあなたと同じLinuxを使用していないので、これは明示的な答えをテストするためのより多くの提案です。私はそれがまだ役立つことを願っていますし、同じ結果が得られるかどうかを確認することに本当に興味があります。
私が実行したテストから、C
列のCPUパーセンテージ値の切り捨て(丸めない)を除いて、値は同じです。
次のテストを実行して、同様の値が得られるかどうかを確認することをお勧めします。一部のリソースを使用するプロセスを開始します。
dd if=/dev/zero of=/dev/null &
DD_PID=$!
次に、;
を使用してプロセスのチェックを実行し、各呼び出しをできるだけ同時に行います。
ps -f --pid $DD_PID | head ; echo --- ; ps -u -p $DD_PID | head
それは次のようなものを生成するはずです:
UID PID PPID C STIME TTY TIME CMD
someuser 2743 21793 99 10:38 pts/25 00:24:37 dd if=/dev/zero of=/dev/null
---
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
someuser 2743 99.9 0.0 107940 656 pts/25 R 10:38 24:37 dd if=/dev/zero of=/dev/null
注:-f
の代わりに-ef
を使用し、aux
の代わりに-u
を使用しましたが、どちらも使用される列とフィルタリングを変更するためのものです、コンテンツではありません。必要に応じて、grep
の使用に切り替え、-p PID
を削除できます。