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

12

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

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. tope /proc/statforneça um uso detalhado e difícil de registrar. Existe uma maneira mais fácil de obter as informações da CPU?

fasil
fonte
3
o que há de errado com os que você cita?
21413
@pataluc Fornece informações mais detalhadas. Eu preciso uma palavra a dizer CPU geral o uso da CPU utilizada: 91% Mem Usado: 78% Mem Free: 22% de algo como isso ..
fasil
veja a resposta de Nathan ... você pode obter sedo resultado se quiser apenas o valor.
pataluc
A votação para fechar como "não construtiva". Em superuser.com/help/dont-ask : " Para evitar que sua pergunta seja sinalizada e possivelmente removida, evite fazer perguntas subjetivas onde ... sua resposta é fornecida junto com a pergunta e você espera mais respostas: 'Eu uso ______ para ______ , O que você usa?' "
bwDraco 24/06
3
@DragonLord, na verdade, existem maneiras bastante limitadas de fazer isso e as duas respostas aqui são de fato úteis. O meu aponta um equívoco muito comum sobre topo outro e dá um comando muito útil. Não é um eu uso X, e você? pergunta, mas uma Como eu faço X pergunta. Votação para reabrir.
terdon

Respostas:

14

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

topdivide o uso da CPU entre usuário, processos e processos do sistema nice, queremos a soma dos três. Portanto, podemos executar topno bmodo atch, o que nos permite analisar sua saída. No entanto, conforme explicado aqui , a primeira iteração top -bretorna as porcentagens desde a inicialização, portanto, precisamos de pelo menos duas iterações ( -n 2) para obter a porcentagem atual. Para acelerar as coisas, você pode definir o dintervalo entre as iterações para 0.01. Finalmente, você é grepa linha que contém as porcentagens da CPU e, em seguida, usa gawkpara somar usuário, sistema e processos agradáveis:

    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

Eu pensei que você também poderia obter essas informações ps -o pcpu axadicionando 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 topé diferente da minha e você deve usá-lo:

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 o código do idioma para C:

LC_ALL=C top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'
Terdon
fonte
Eu apaguei minha resposta porque o que você disse está correto. Este parece ser um método válido.
Nathan C
@ NathanC Eu pensei que sua resposta estava correta também, era o que eu teria respondido. Então eu testei e fiquei surpreso :).
terdon
@terdon Obrigado pela resposta detalhada ... Não consegui obter a saída para o comando acima. Existe alguma modificação sintática necessário ..
fasil
@ fasil não, deve funcionar. Qual é o problema? Alguma mensagem de erro?
terdon
@terdon Não recebo nenhuma saída para o comando completo .. com #top -bn 2 -d 0,01 recebo o resultado completo, mas adicionando grep '^% Cpu' não vejo nenhuma saída, apenas os prompts não retornam Erro ...
fasil
9

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

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 sysstatpacote, e 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

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

Philip Kearns
fonte
1
Você provavelmente deve dizer diferente. A linha que você postou será medida a cada 60 segundos, 600 vezes. A maneira como li sua postagem foi que o 600 é uma duração; portanto, se eu colocar 30 600, levaria a cada 30 segundos por 600 minutos; no entanto, levaria um a cada 30 segundos 600 vezes.
James McDonnell