Qual é a diferença na utilização da CPU entre 'ps aux' e 'ps -ef'?

6

Eu uso o Ubuntu 12.04.1 Linux. Eu vejo uma diferença entre %CPU e C formato de saída do comando ps para um processo. Não está claramente anotado na página ps man.

Páginas masculinas diz:

  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).

Então, basicamente, deve ser o mesmo, mas não é:

$ 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 

A parte superior mostra 2% de utilização da CPU ao mesmo tempo. Eu sei que o 'top' mostra a atual utilização da CPU, enquanto ps mostra a utilização da CPU durante a vida útil do processo.

Eu acho que a definição de tempo de vida é um pouco diferente para essas duas opções de formato.

    
por digital_infinity 06.03.2014 / 13:38

2 respostas

3

As colunas% cpu e C estão mostrando quase, mas não exatamente, a mesma coisa. Se você olhar a fonte para ps em ps / output.c você pode ver as diferenças entre pr_c e pr_cpu

C é o valor inteiro para% cpu, como você pode imaginar. A diferença estranha é que C é limitado a um máximo de 99, enquanto% cpu não é (há uma verificação para% cpu, mas apenas muda o formato de xx.x% para xxx%).

Agora, não sei ao certo por que o C tem esse clamping; parece um pouco arbitrário. Está lá desde o procps 3.2.7 (2006), então provavelmente foi a partir da era das CPUs únicas

    
por 23.11.2016 / 11:35
1

Nota: Eu não estou usando o mesmo Linux que você, então isso é mais uma sugestão para testar uma resposta explícita. Espero que ainda ajude e eu estaria realmente interessado em ver se você obtém os mesmos resultados.

Nos testes que executei, os valores são os mesmos para além do truncamento (não arredonda) dos valores percentuais da CPU para a coluna C .

Sugiro executar o teste a seguir para ver se você obtém valor semelhante. Inicie um processo que usará alguns recursos:

dd if=/dev/zero of=/dev/null & 
DD_PID=$!

Em seguida, execute a verificação do processo usando ; para tornar cada chamada o mais parecida possível simultânea:

ps -f --pid $DD_PID | head ; echo --- ; ps -u -p $DD_PID | head

Deve gerar algo como:

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

Observação: usei -f em vez de -ef e -u em vez de aux , mas ambos devem alterar as colunas e a filtragem usadas, não o conteúdo. Se desejar, você pode alternar para usar um grep e descartar o -p PID .

    
por 28.10.2016 / 12:39