Como posso monitorar o uso da CPU pelo usuário?

14

Eu preciso monitorar o uso da CPU por usuários de dois servidores (Ubuntu e CentOS). Por exemplo:

user1     5%
user2    10%
...

Existe uma ferramenta semelhante a top ou htop que pode fazer isso?

    
por Amged Rustom 20.03.2014 / 12:25

1 resposta

14

Aqui está um script para imprimir o uso da CPU total para cada usuário atualmente logado , showPerUserCPU.sh :

own=$(id -nu)
cpus=$(lscpu | grep "^CPU(s):" | awk '{print $2}')

for user in $(who | awk '{print $1}' | sort -u)
do
    # print other user's CPU usage in parallel but skip own one because
    # spawning many processes will increase our CPU usage significantly
    if [ "$user" = "$own" ]; then continue; fi
    (top -b -n 1 -u "$user" | awk -v user=$user -v CPUS=$cpus 'NR>7 { sum += $9; } END { print user, sum, sum/CPUS; }') &
    # don't spawn too many processes in parallel
    sleep 0.05
done
wait

# print own CPU usage after all spawned processes completed
top -b -n 1 -u "$own" | awk -v user=$own -v CPUS=$cpus 'NR>7 { sum += $9; } END { print user, sum, sum/CPUS; }'

E aqui está uma versão ligeiramente modificada para imprimir o uso da CPU de todos usuários disponíveis (mas ignorando aqueles com uso de CPU igual a zero), showAllPerUserCPU.sh :

own=$(id -nu)
cpus=$(lscpu | grep "^CPU(s):" | awk '{print $2}')

for user in $(getent passwd | awk -F ":" '{print $1}' | sort -u)
do
    # print other user's CPU usage in parallel but skip own one because
    # spawning many processes will increase our CPU usage significantly
    if [ "$user" = "$own" ]; then continue; fi
    (top -b -n 1 -u "$user" | awk -v user=$user -v CPUS=$cpus 'NR>7 { sum += $9; } END { if (sum > 0.0) print user, sum, sum/CPUS; }') &
    # don't spawn too many processes in parallel
    sleep 0.05
done
wait

# print own CPU usage after all spawned processes completed
top -b -n 1 -u "$own" | awk -v user=$own -v CPUS=$cpus 'NR>7 { sum += $9; } END { print user, sum, sum/CPUS; }'

A primeira coluna representa o nome do usuário, a segunda coluna o uso agregado da CPU e a terceira coluna que a CPU normalizada usa de acordo com o número de núcleos da CPU.

Há também um script relacionado para mostrar o uso da memória total para cada usuário: showPerUserMem.sh

Para monitoramento ao vivo, execute esses scripts periodicamente por meio do comando watch .

Para classificação por uso da CPU, canalize a saída para sort -k2 -nr .

    
por 20.03.2014 / 13:43