Linuxでユーザースペースプロセスが使用するメモリの合計量を測定する方法は?

Linuxでユーザースペースプロセスが使用するメモリの合計量を測定する方法は?

Linuxでユーザー空間プログラムに割り当てられたメモリの合計量を測定する方法は?これは、物理メモリ内のユーザー空間プログラムが所有するすべてのメモリページのサイズです。

/proc/meminfoこの情報は提供されていないようです。

rss現在、すべてのプロセスのフィールドを追加していますが、/proc/$pid/stat共有メモリページは考慮しません。

修正する:「ユーザースペース」とは、ルート(カーネルスペースではない)を含むすべてのユーザーが実行するプロセスを意味します。

答え1

使用smem交換せずに共有メモリを2回計算せずに、すべてのユーザーメモリの合計を表示します。

sudo smem -c pss -t | tail -1

私のシステムの出力:

4119846

拡大する:

  • -c pssこの場合は列を選択してください。PSS。からman smem

          smem reports physical memory usage, taking shared memory  pages
          into  account.   Unshared memory is reported as the USS (Unique
          Set Size).  Shared memory is divided evenly among the processes
          sharing   that  memory.   The  unshared  memory  (USS)  plus  a
          process's proportion of shared memory is reported  as  the  PSS
          (Proportional Set Size).  The USS and PSS only include physical
          memory usage.  They do not include memory that has been swapped
          out to disk.
    
    • -t示すみんなまたは、最後に使用されたすべてのPSSの合計を取得し、tail -1古いデータを削除します。

合計のみ表示共有されていませんユーザーメモリは-c pss次のように置き換えられます-c uss

sudo smem -c uss -t | tail -1

出力:

 3874356 

上記のPSSの合計は、次に示す数字とほぼ同じです。行5、列2ここで:

smem -w

出力:

Area                           Used      Cache   Noncache 
firmware/hardware                 0          0          0 
kernel image                      0          0          0 
kernel dynamic memory       1367712    1115708     252004 
userspace memory            4112112     419884    3692228 
free memory                  570060     570060          0 

答え2

以下は、どのプロセスがどの程度のスワップとPIDを使用しているかを示すために使用する1行のコードです。

for file in /proc/*/status;
do
    awk '/VmSwap|Tgid|Name/ {printf "%s %s %s", $2, $3, $4} END { print "" }' "$file";
done | sort -k 3 -n -r | head -20

(読みやすくするために複数行に分けました。1行にしたい場合は、すべての行を連結するだけです。)

関連情報