web-dev-qa-db-fra.com

Comment trouver l'utilisation de la mémoire utilisateur sous Linux

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
24
Hamidreza

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.

26
scai

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
27
Joshua Huber

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
15
h22

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)))
0
Hridoy Sankar Dutta