Devo monitorare l'utilizzo della CPU da parte degli utenti di due server (Ubuntu e CentOS). Per esempio:
user1 5%
user2 10%
...
Esiste uno strumento simile top
o htop
che può farlo?
Devo monitorare l'utilizzo della CPU da parte degli utenti di due server (Ubuntu e CentOS). Per esempio:
user1 5%
user2 10%
...
Esiste uno strumento simile top
o htop
che può farlo?
Risposte:
Ecco uno script per stampare l' utilizzo totale della CPU per ciascun utente attualmente connesso , 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; }'
Ed ecco una versione leggermente modificata per stampare l'utilizzo della CPU di tutti gli utenti disponibili (ma saltando quelli con un utilizzo della CPU pari 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; }'
La prima colonna rappresenta il nome utente, la seconda colonna l'utilizzo della CPU aggregata e la terza colonna l'utilizzo della CPU normalizzata in base al numero di core della CPU.
Esiste anche uno script correlato per mostrare l' utilizzo della memoria totale per ciascun utente: showPerUserMem.sh
Per il monitoraggio live, eseguire questi script periodicamente tramite il watch
comando.
Per ordinare in base all'utilizzo della CPU, reindirizzare l'output a sort -k2 -nr
.
$USER
è già il tuo nome utente, quindi è lo stesso del id -nu
comando che stai usando. Ho modificato il tuo post per cambiarlo.
/etc/init.d/
directory lo stanno facendo. Al contrario, è necessario evitare la sovrascrittura delle variabili di ambiente esistenti.
top -u user
e reindirizzare il risultato su un file, quindi monitorare un altro utente. avresti quindi un monitor dell'utilizzo di proc per i tuoi utenti a un determinato intervallo.