GNU/Linux >> Linux の 問題 >  >> Linux

Linuxでユーザーのメモリ使用量を見つける方法

このワンライナーは、ディストリビューションとバージョンが異なる少なくとも 4 つの異なる Linux システムで機能しました。 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

実装については、ここにはシェル ループ構造はありません。これは awk で連想配列を使用します グループ化と集計を行います。

これは、適切なサイズの MySQL、Tomcat、および Apache を実行しているサーバーの 1 つからのサンプル出力です。数値は MB 単位です。

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

警告:ほとんどの同様のソリューションと同様に、これは常駐セット (RSS) のみを考慮しているため、共有メモリ セグメントはカウントされません。

編集 :より読みやすいバージョン。

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

そして出力:

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

標準ツールを使用したユーザーごとのメモリ使用率 (%):

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

またはより正確に:

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

最初のバージョンは、ps によって報告された各プロセスのメモリ パーセンテージを合計するだけです。 . 2 番目のバージョンでは、代わりにメモリをバイト単位で合計し、後で合計パーセンテージを計算するため、精度が高くなります。


お使いのシステムがサポートしている場合は、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 

または

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 

Ubuntu では、次のように入力して smem をインストールできます

sudo apt install smem

Linux
  1. LinuxでFINDを使用する方法

  2. Linuxのメモリ使用量

  3. Linuxでアプリケーションによるメモリ使用量を制限するには?

  1. LinuxですべてのSudoユーザーを見つける方法

  2. Linux ベースのサーバーでメモリ使用量を確認する方法

  3. Linux でメモリ使用量はどのように報告されますか?

  1. Linuxでファイルを見つける方法

  2. KaliLinuxでIPアドレスを見つける方法

  3. Linuxでユーザーを一覧表示する方法