GNU/Linux >> Linux Esercitazione >  >> Linux

Come trovare l'utilizzo della memoria dell'utente in Linux

Questo one-liner ha funzionato per me su almeno quattro diversi sistemi Linux con diverse distribuzioni e versioni. Funzionava anche su 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

Per quanto riguarda l'implementazione, qui non ci sono costrutti di loop di shell; questo utilizza un array associativo in awk per eseguire il raggruppamento e la sommatoria.

Ecco l'output di esempio da uno dei miei server che esegue MySQL, Tomcat e Apache di dimensioni adeguate. Le cifre sono in MB.

mysql 1566
joshua 1186                                                                                  
tomcat 353                                                                                   
root 28                                                                                      
wwwrun 12                                                                                    
vbox 1                                                                                       
messagebus 1                                                                                 
avahi 1                                                                                      
statd 0                                                                                      
nagios 0

Avvertimento:come la maggior parte delle soluzioni simili, questo considera solo il resident set (RSS), quindi non conta alcun segmento di memoria condivisa.

MODIFICA :Una versione più leggibile.

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

E l'output:

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

Utilizzo della memoria per utente in percentuale utilizzando strumenti 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

o per maggiore precisione:

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 prima versione riassume solo la percentuale di memoria per ogni processo come riportato da ps . La seconda versione riassume invece la memoria in byte e calcola successivamente la percentuale totale, portando così a una maggiore precisione.


Se il tuo sistema lo supporta, prova a installare e utilizzare 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 

o

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 

In Ubuntu, smem può essere installato digitando

sudo apt install smem

Linux
  1. Come usare TROVA in Linux

  2. Utilizzo della memoria di Linux

  3. Come trovare tutti gli utenti Sudo in Linux

  4. Come controllare l'utilizzo della memoria in un server basato su Linux

  5. Come viene riportato l'utilizzo della memoria in Linux?

Come trovare l'indirizzo IP in Linux

Come trovare il nome host in Linux

Come scoprire a quali gruppi appartiene un utente in Linux

Come trovare i migliori processi in esecuzione in base all'utilizzo della memoria

Come cambiare utente su Linux

Come trovare i migliori processi in esecuzione in base all'utilizzo di memoria e CPU in Linux