Quais são os métodos disponíveis para obter o uso da CPU na linha de comando do Linux? [fechadas]

11

Sabemos que top é um comando para obter o uso da CPU no Linux e outras formas incluem cat /proc/stat que é usado pelo topo.

Quais são os outros métodos para obter o uso da CPU na linha de comando do Linux?

Cenário de caso de uso: A saída deste comando será usada por um script para registrar o uso da CPU continuamente. top e /proc/stat fornecem uso detalhado que é difícil de registrar. Existe uma maneira mais fácil de obter as informações da CPU?

    
por fasil 20.06.2013 / 13:13

2 respostas

14

Como outros já disseram, a melhor maneira é provavelmente top . Ele precisa de um pouco de ajustes e um pouco de análise, mas você pode obtê-lo para fornecer o uso atual da CPU como uma porcentagem.

top divide o uso da CPU entre usuário, processos do sistema e nice processos, queremos a soma dos três. Assim, podemos executar o modo top in b atch, o que nos permite analisar sua saída. No entanto, como explicado aqui , a primeira iteração de top -b retorna as porcentagens desde a inicialização, portanto, precisamos pelo menos duas iterações ( -n 2 ) para obter a porcentagem atual. Para acelerar as coisas, você pode definir o d elay entre iterações para 0.01 . Por fim, você grep da linha que contém as porcentagens de CPU e, em seguida, usa gawk para somar processos de usuário, sistema e bons:

    top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'
        -----  ------   -----------    ---------   ----------------------
          |      |           |             |             |------> add the values
          |      |           |             |--> keep only the 2nd iteration
          |      |           |----------------> keep only the CPU use lines
          |      |----------------------------> set the delay between runs
          |-----------------------------------> run twice in batch mode

Pensei que você também pudesse obter essas informações em ps -o pcpu ax adicionando o% de uso de cada processo em execução. Infelizmente, conforme explicado aqui , ps "retorna a porcentagem de tempo gasto em execução durante toda a vida útil de um processo "que não é o que você precisa.

EDITAR

Com base no seu comentário, sua versão de top é diferente da minha e você deve usar isso:

top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'

E, para evitar problemas com a localização, defina a localidade como C:

LC_ALL=C top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'
    
por 20.06.2013 / 17:19
9

sar é a maneira definitiva de fazer isso. Então, por exemplo, sar -u produzirá algo assim:

08:30:01 AM       CPU     %user     %nice   %system   %iowait     %idle
08:40:01 AM       all      6.94      0.00      1.77      4.92     86.36
08:50:01 AM       all      5.73      0.00      2.31     12.72     79.24
09:00:01 AM       all      5.95      0.00      2.58     18.36     73.11
09:10:01 AM       all      6.88      0.00      2.22     17.44     73.45
09:20:01 AM       all      8.61      0.00      2.68     27.93     60.78

Você não diz qual Linux você usa, mas para o CentOS / RedHat você precisa instalar o pacote sysstat , e eu acho que é o mesmo no Debian / Ubuntu.

Você também pode usar o sar para coletar estatísticas ad hoc :

sar -o /tmp/sar.out 60 600

Colete estatísticas a cada 60 segundos 600 vezes, portanto, 600 minutos.

    
por 20.06.2013 / 16:07