Como determinar a porcentagem de CPU usada por um usuário da saída do comando sa?

0

Estou usando sa -m para exibir detalhes de uso da CPU de cada usuário em um sistema RHEL 7. Ele exibe as informações no formato abaixo.

oracle                              15335   88164.18re     176.77cp         0avio    167603k
root                                 9640    8294.42re      10.90cp         0avio     33737k
3rdeye                                250       0.33re       0.04cp         0avio     28358k
sshd                                    4       2.11re       0.00cp         0avio     22068k
dbus                                    2       0.00re       0.00cp         0avio      7600k
smmsp                                   2       0.00re       0.00cp         0avio     21408k

Eu encontrei este site que dá uma breve informação sobre os campos. ( link )

re - "tempo real" em minutos do relógio de parede cp - soma do tempo do sistema e do usuário em minutos da CPU k - uso do núcleo médio em tempo de CPU, em unidades de 1k

Existe uma maneira de calcular a porcentagem de uso da CPU para cada usuário a partir desses dados?

UPDATE 1:

Estou adicionando esta atualização, uma vez que Alex está sugerindo usar um script que é baseado no comando principal para obter o uso da CPU por usuário. Eu tenho usado um script com essa lógica ( top -b -n 1 -u $USERNAME | awk 'NR>7 { sum += $9; } END { print sum; }' ) para calcular o uso da CPU de um usuário. Mas se eu observar de perto, parece que o script não lhe dá o valor correto. Eu encontrei um motivo para isso. Quando você executa o topo, ele mostra um valor para o uso da CPU e, em seguida, mantém a atualização a cada 3 (padrão) segundos. Mas o valor inicial parece ser constante toda vez que você topar.

[root@myserver unix]# top -b -n 1 -u oracle |grep -i "cpu"|head -1
%Cpu(s):  5.6 us,  2.6 sy,  0.0 ni, 79.0 id, 12.6 wa,  0.0 hi,  0.2 si,  0.0 st
[root@myserver unix]# top -b -n 1 -u oracle |grep -i "cpu"|head -1
%Cpu(s):  5.6 us,  2.6 sy,  0.0 ni, 79.0 id, 12.6 wa,  0.0 hi,  0.2 si,  0.0 st
[root@myserver unix]# top -b -n 1 -u oracle |grep -i "cpu"|head -1
%Cpu(s):  5.6 us,  2.6 sy,  0.0 ni, 79.0 id, 12.6 wa,  0.0 hi,  0.2 si,  0.0 st
[root@myserver unix]# top -b -n 1 -u oracle |grep -i "cpu"|head -1
%Cpu(s):  5.6 us,  2.6 sy,  0.0 ni, 79.0 id, 12.6 wa,  0.0 hi,  0.2 si,  0.0 st

Eu executei top para o usuário oracle quatro vezes e ele continua dando os mesmos valores para o uso da CPU. Eu podia ver claramente quando eu corria top sem opções -b e -n:

# top -u oracle
top - 08:47:44 up 3 days,  2:58,  2 users,  load average: 2.21, 1.69, 1.42
Tasks: 1084 total,   3 running, 1081 sleeping,   0 stopped,   0 zombie
%Cpu(s):  5.6 us,  2.6 sy,  0.0 ni, 79.0 id, 12.6 wa,  0.0 hi,  0.2 si,  0.0 st

Observe como isso começa com esses valores para uso da CPU. Claro, depois de 3 segundos ele é atualizado e começa a exibir os valores corretos. Esta é a razão pela qual eu quero mudar minha abordagem para determinar o uso da CPU por usuário. Por favor, corrija-me se estiver faltando alguma coisa.

    
por Vinod 18.08.2017 / 18:37

1 resposta

0

Posso sugerir-lhe uma forma alternativa. E é através do pacote systat (o link é para o arco), e fornece comandos como mpstat , iostat e muitos outros.

saída do mpstat:

Linux 4.9.43-1-lts (laptop)     18/08/2017  _x86_64_    (4 CPU)

19:51:50     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
19:51:50     all    2,18    0,03    0,58    0,07    0,00    0,02    0,00    0,00    0,00   97,13

saída de iostat:

Linux 4.9.43-1-lts (laptop)     18/08/2017  _x86_64_    (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2,18    0,03    0,60    0,07    0,00   97,13

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               3,13        28,15        80,47    1029654    2943525
    
por 18.08.2017 / 19:55

Tags