J'ai besoin de surveiller l'utilisation du processeur par les utilisateurs de deux serveurs (Ubuntu et CentOS). Par exemple:
user1 5%
user2 10%
...
Existe-t-il un outil similaire top
ou htop
qui peut le faire?
J'ai besoin de surveiller l'utilisation du processeur par les utilisateurs de deux serveurs (Ubuntu et CentOS). Par exemple:
user1 5%
user2 10%
...
Existe-t-il un outil similaire top
ou htop
qui peut le faire?
Réponses:
Voici un script pour imprimer l' utilisation totale du processeur pour chaque utilisateur actuellement connecté , 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; }'
Et voici une version légèrement modifiée pour imprimer l'utilisation du processeur de tous les utilisateurs disponibles (mais en ignorant ceux avec une utilisation du processeur de zéro), 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 première colonne représente le nom d'utilisateur, la deuxième colonne l'utilisation agrégée du processeur et la troisième colonne l'utilisation normalisée du processeur en fonction du nombre de cœurs de processeur.
Il existe également un script associé pour afficher l' utilisation totale de la mémoire pour chaque utilisateur: showPerUserMem.sh
Pour la surveillance en direct, exécutez simplement ces scripts périodiquement via la watch
commande.
Pour trier par utilisation CPU, dirigez la sortie vers sort -k2 -nr
.
$USER
est déjà votre nom d'utilisateur, donc c'est la même chose que la id -nu
commande que vous utilisez. J'ai édité votre message pour le changer.
/etc/init.d/
répertoire le font également. Le remplacement des variables d'environnement existantes en revanche doit être évité.
top -u user
et rediriger le résultat vers un fichier, puis surveiller un autre utilisateur. vous auriez alors un moniteur d'utilisation de proc pour vos utilisateurs à un intervalle donné.