Como calcular a carga da CPU?

0

Estou executando top -b -n2 -d 1 | grep Cpu em um loop e percebo que ele retorna duas entradas em cada iteração ...

1) Para cada loop existem duas linhas de resultados ... devo estar usando a primeira ou segunda linha ... qual a diferença entre as duas?

2) Para calcular a utilização da CPU, eu adiciono% us,% sy,% ni,% hi e% si?

Cpu(s):  1.6%us,  1.7%sy,  0.0%ni, 96.6%id,  0.0%wa,  0.0%hi,  0.1%si,  0.0%st
Cpu(s):  8.7%us,  9.4%sy,  0.0%ni, 81.9%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st


Cpu(s):  1.6%us,  1.7%sy,  0.0%ni, 96.6%id,  0.0%wa,  0.0%hi,  0.1%si,  0.0%st
Cpu(s):  9.7%us,  8.9%sy,  0.0%ni, 81.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    
por Jonathan Kittell 22.09.2017 / 19:17

2 respostas

3
  1. @garethTheRed está correto, você está pedindo duas iterações de saída.

  2. Isso depende do que você entende por "utilização da CPU". Cada item na linha representa algo diferente:

    • %us é o tempo gasto no modo de usuário por processos com um bom valor de 0 ou superior. Isso inclui a maioria do que a maioria dos aplicativos de usuário faz.
    • %sy é o tempo gasto no modo kernel que não se enquadra em nenhuma outra área. Isso é principalmente o tempo gasto em chamadas do sistema.
    • %ni é o tempo gasto no modo de usuário por processos com um bom valor abaixo de 0. Essencialmente, são tarefas em segundo plano.
    • %id é o tempo gasto sem fazer nada. Deve ser igual a 100 menos a soma dos outros valores.
    • %wa é tempo gasto aguardando a conclusão da E / S que não é gasta fazendo outra coisa. Isso inclui o tempo gasto esperando para ler ou gravar dados no disco.
    • %hi é o tempo gasto no modo kernel atendendo a interrupções de hardware. Na maioria dos bons sistemas, isso deve ser próximo de zero.
    • %si é o tempo gasto no software de manutenção do modo kernel e interrupções adiadas (na maioria dos sistemas, isso é principalmente interrupções de rede).
    • %st é a hora em que o sistema poderia estar executando algo, mas outra máquina virtual estava ocupada. Isso deve ser zero, a menos que você mesmo esteja executando máquinas virtuais ou esteja executando em uma plataforma de hospedagem na nuvem, como EC2, GCE, DigitalOcean ou Linode. Este não pode aparecer em alguns sistemas, especialmente sistemas antigos ou não-Linux.

    Pela maioria das definições de não programadores, a utilização da CPU de um sistema é igual à soma de %us , %sy e %ni (e, de fato, sistemas UNIX antigos mostram apenas esses valores). Uma declaração mais precisa seria que é igual à soma de tudo, exceto %id , %wa e %st (porque a CPU não está fazendo nada literalmente nesses estados).

    Usando as linhas de exemplo que você deu, as utilizações sob a segunda definição seriam: 3,4%, 18,1%, 3,4% e 18,6%.

por 22.09.2017 / 21:03
0
 command = "top -bn 2 -d 0.01 | grep '^Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'" 

'''
The 1st iteration of top -b returns the percentages since boot. 
We need at least two iterations (-n 2) to get the current percentage. 
To speed things up, you can set the delay between iterations to 0.01. 
top splits CPU usage between user, system processes and nice processes, we want the sum of the three. 
Finally, you grep the line containing the CPU percentages and then use gawk to sum user, system and nice processes:

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
'''
    
por 23.09.2017 / 01:14

Tags