Comment puis-je voir l'utilisation de la mémoire par l'utilisateur dans Linux Centos 6
For example:
USER USAGE
root 40370
admin 247372
user2 30570
user3 967373
utilisation de la mémoire par utilisateur en pourcentage à l'aide d'outils standard:
for USER in $(ps haux | awk '{print $1}' | sort -u)
do
ps haux | awk -v user=$USER '$1 ~ user { sum += $4} END { print user, sum; }'
done
ou pour plus de précision:
TOTAL=$(free | awk '/Mem:/ { print $2 }')
for USER in $(ps haux | awk '{print $1}' | sort -u)
do
ps hux -U $USER | awk -v user=$USER -v total=$TOTAL '{ sum += $6 } END { printf "%s %.2f\n", user, sum / total * 100; }'
done
La première version résume simplement le pourcentage de mémoire pour chaque processus tel que rapporté par ps
. La deuxième version résume la mémoire en octets à la place et calcule ensuite le pourcentage total, ce qui conduit à une précision plus élevée.
Ce one-liner a fonctionné pour moi sur au moins quatre systèmes Linux différents avec différentes distributions et versions. Il a également fonctionné sur FreeBSD 10.
ps hax -o rss,user | awk '{a[$2]+=$1;}END{for(i in a)print i" "int(a[i]/1024+0.5);}' | sort -rnk2
À propos de l'implémentation, il n'y a aucune construction de boucle Shell ici; ceci utilise un tableau associatif dans awk
pour faire le regroupement et la sommation.
Voici un exemple de sortie d'un de mes serveurs qui exécute un MySQL, Tomcat et Apache de taille décente. Les chiffres sont en Mo.
mysql 1566
joshua 1186
Tomcat 353
root 28
wwwrun 12
vbox 1
messagebus 1
avahi 1
statd 0
nagios 0
Avertissement: comme la plupart des solutions similaires, cela ne prend en compte que l'ensemble résident (RSS), donc il ne compte aucun segment de mémoire partagée.
EDIT : Une version plus lisible par l'homme.
echo "USER RSS PROCS" ; echo "-------------------- -------- -----" ; ps hax -o rss,user | awk '{rss[$2]+=$1;procs[$2]+=1;}END{for(user in rss) printf "%-20s %8.0f %5.0f\n", user, rss[user]/1024, procs[user];}' | sort -rnk2
Et la sortie:
USER RSS PROCS
-------------------- -------- -----
mysql 1521 1
joshua 1120 28
Tomcat 379 1
root 19 107
wwwrun 10 10
vbox 1 3
statd 1 1
nagios 1 1
messagebus 1 1
avahi 1 1
Si votre système prend en charge, essayez d'installer et d'utiliser smem :
smem -u
User Count Swap USS PSS RSS
gdm 1 0 308 323 820
nobody 1 0 912 932 2240
root 76 0 969016 1010829 1347768
ou
smem -u -t -k
User Count Swap USS PSS RSS
gdm 1 0 308.0K 323.0K 820.0K
nobody 1 0 892.0K 912.0K 2.2M
root 76 0 937.6M 978.5M 1.3G
ameskaas 46 0 1.2G 1.2G 1.5G
124 0 2.1G 2.2G 2.8G
Dans Ubuntu, smem peut être installé en tapant
Sudo apt install smem
Vous pouvez utiliser le script Python suivant pour rechercher l'utilisation de la mémoire par utilisateur en utilisant uniquement les modules sys et os.
import sys
import os
# Get list of all users present in the system
allUsers = os.popen('cut -d: -f1 /etc/passwd').read().split('\n')[:-1]
for users in allUsers:
# Check if the home directory exists for the user
if os.path.exists('/home/' + str(users)):
# Print the current usage of the user
print(os.system('du -sh /home/' + str(users)))