Linux
“ps aux”和“ps -ef”之間的 CPU 使用率有什麼區別?
我使用 Ubuntu 12.04.1 Linux。我看到了程序命令的輸出格式
%CPU
和C
輸出格式之間的區別。手冊頁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 使用率。我知道“頂部”顯示目前的 CPU 使用率,同時
ps
顯示程序生命週期內的 CPU 使用率。我猜這兩種格式選項的生命週期定義有些不同。
%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 時代