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 topou htopqui 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 topou htopqui 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 watchcommande.
Pour trier par utilisation CPU, dirigez la sortie vers sort -k2 -nr.
$USERest déjà votre nom d'utilisateur, donc c'est la même chose que la id -nucommande 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 useret 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é.