GNU/Linux >> Tutoriels Linux >  >> Linux

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

Ce one-liner a fonctionné pour moi sur au moins quatre systèmes Linux différents avec différentes distributions et versions. Cela 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 pas de 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 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

Mise en garde :comme la plupart des solutions similaires, cela ne prend en compte que l'ensemble résident (RSS), de sorte qu'il ne compte aucun segment de mémoire partagée.

MODIFIER  :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 le résultat :

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

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 plus grande précision.


Si votre système le 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

Linux
  1. Comment utiliser FIND sous Linux

  2. Utilisation de la mémoire Linux

  3. Comment vérifier l'utilisation de la mémoire sur un serveur basé sur Linux

  4. Comment l'utilisation de la mémoire est-elle signalée sous Linux ?

  5. Comment limiter l'utilisation de la mémoire par application sous Linux ?

Comment trouver une adresse IP sous Linux

Comment trouver le nom d'hôte sous Linux

Comment savoir à quels groupes un utilisateur appartient sous Linux

Comment trouver les principaux processus en cours d'exécution par utilisation de la mémoire

Comment changer d'utilisateur sous Linux

Comment trouver les principaux processus en cours d'exécution par utilisation de la mémoire et du processeur sous Linux