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.