GNU/Linux >> Znalost Linux >  >> Linux

Jak zjistit využití uživatelské paměti v linuxu

Tato jednolinka mi fungovala na nejméně čtyřech různých systémech Linux s různými distribucemi a verzemi. Fungovalo to také na 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

Co se týče implementace, nejsou zde žádné konstrukce smyček shellu; toto používá asociativní pole v awk k provedení seskupení a shrnutí.

Zde je ukázkový výstup z jednoho z mých serverů, na kterém běží slušná velikost MySQL, Tomcat a Apache. Čísla jsou v MB.

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

Upozornění:stejně jako většina podobných řešení se toto týká pouze rezidentní sady (RSS), takže nepočítá žádné segmenty sdílené paměti.

UPRAVIT :Lidsky čitelnější verze.

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

A výstup:

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

Využití paměti na uživatele v procentech pomocí standardních nástrojů:

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

nebo pro větší přesnost:

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

První verze pouze sčítá procenta paměti pro každý proces, jak uvádí ps . Druhá verze místo toho sčítá paměť v bajtech a následně vypočítá celkové procento, což vede k vyšší přesnosti.


Pokud váš systém podporuje, zkuste nainstalovat a použít 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 

nebo

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 

V Ubuntu lze smem nainstalovat zadáním

sudo apt install smem

Linux
  1. Jak používat FIND v Linuxu

  2. Využití paměti Linuxu

  3. Jak se v Linuxu hlásí využití paměti?

  1. Jak najít všechny uživatele Sudo v Linuxu

  2. Jak zkontrolovat využití paměti na serveru se systémem Linux

  3. Jak omezit využití paměti aplikací v linuxu?

  1. Jak najít soubory v Linuxu

  2. Jak najít IP adresu v Kali Linuxu

  3. Jak vypsat seznam uživatelů v Linuxu