Linux

“ps aux”和“ps -ef”之間的 CPU 使用率有什麼區別?

  • June 19, 2017

我使用 Ubuntu 12.04.1 Linux。我看到了程序命令的輸出格式%CPUC輸出格式之間的區別。手冊頁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 時代

引用自:https://unix.stackexchange.com/questions/118404