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

「ps -ef」を実行した場合、各プロセスのメモリ使用量を表示するにはどうすればよいですか?

@ user26528 の回答では、メモリが正しく計算されません。一番上のマッピングだけでなく、smap のマッピングの合計が必要です。このスクリプトはそれを行う必要があります:

#!/bin/bash

for pid in $(ps -ef | awk '{print $2}'); do
    if [ -f /proc/$pid/smaps ]; then
        echo "* Mem usage for PID $pid"     
        rss=$(awk 'BEGIN {i=0} /^Rss/ {i = i + $2} END {print i}' /proc/$pid/smaps)
        pss=$(awk 'BEGIN {i=0} /^Pss/ {i = i + $2 + 0.5} END {print i}' /proc/$pid/smaps)
        sc=$(awk 'BEGIN {i=0} /^Shared_Clean/ {i = i + $2} END {print i}' /proc/$pid/smaps)            
        sd=$(awk 'BEGIN {i=0} /^Shared_Dirty/ {i = i + $2} END {print i}' /proc/$pid/smaps)
        pc=$(awk 'BEGIN {i=0} /^Private_Clean/ {i = i + $2} END {print i}' /proc/$pid/smaps)
        pd=$(awk 'BEGIN {i=0} /^Private_Dirty/ {i = i + $2} END {print i}' /proc/$pid/smaps)
        echo "-- Rss: $rss kB" 
        echo "-- Pss: $pss kB"
        echo "Shared Clean $sc kB"
        echo "Shared Dirty $sd kB"
        echo "Private $(($pd + $pc)) kB"
    fi
done

ps ef -o command,vsize,rss,%mem,size

共有メモリのオプションは見つかりませんでしたが、物理メモリ全体の割合と、プロセスをスワップアウトするために必要なスワップスペースの量のオプションは見つかりました。 ps のマニュアル ページには、これとその他の詳細が記載されています。


プロセスをメモリ使用量別に一覧表示

<ブロック引用>

ps -e -orss=,args=|並べ替え -b -k1,1n


Linux
  1. カーネル専用のメモリの使用状況を監視するには?

  2. Linux でプロセスのプロセッサ アフィニティを設定するにはどうすればよいですか?

  3. プロセスのピーク時のメモリ使用量

  1. プロセスが持つことができるさまざまな UID のそれぞれの目的は何ですか?

  2. 実行中のプロセスの絶対パスを知るにはどうすればよいですか?

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

  1. メモリ帯域幅を観察するにはどうすればよいですか?

  2. アプリケーションのメモリ使用量を制限するには?

  3. Linux カーネルからメモリのブロックを予約するにはどうすればよいですか?