web-dev-qa-db-ja.com

VSS / RSS / PSS / USSに関するこの説明は正確ですか?

VSS/RSS/PSS/USSに関する説明を読みました。


この投稿の目的は、さまざまなツールからのメモリレポートの解釈に役立つ情報を提供して、Linuxプロセスおよびシステムの実際のメモリ使用量を判断できるようにすることです。

Androidにはprocrank(/ system/xbin/procrank)というツールがあり、Linuxプロセスのメモリ使用量を使用率の高い順にリストします。プロセスごとに報告されるサイズは、VSS、RSS、PSS、およびUSSです。

この説明を簡単にするために、メモリはバイトではなくページで表されます。私たちのようなLinuxシステムは、最低レベルで4096バイトページのメモリを管理します。

VSS(psからVSZとして報告される)は、プロセスのアクセス可能な合計アドレス空間です。このサイズには、RAMに割り当てられているが書き込まれていないmallocのように常駐していない可能性のあるメモリも含まれます。VSSは、プロセスの実際のメモリ使用量を決定するのにほとんど役に立ちません。

RSSは、プロセスのRAMに実際に保持されている合計メモリです。RSSは、共有ライブラリがロードされている場合でも、プロセスが使用する共有ライブラリの合計を報告するため、誤解を招く可能性がありますRSSは、1つのプロセスのメモリ使用量を正確に表すものではありません。

PSSは、共有ライブラリの比例サイズを報告するという点でRSSと異なります。つまり、3つのプロセスがすべて30ページの共有ライブラリを使用する場合、そのライブラリは、3つのプロセスのそれぞれについて報告されるPSSに10ページのみを提供します。 PSSは、システム内のすべてのプロセスのPSSを合計すると、システム内の合計メモリ使用量を適切に表すため、非常に有用な数値です。プロセスが強制終了されると、そのPSSに貢献した共有ライブラリは、そのライブラリをまだ使用している残りのプロセスのPSS合計に比例して分配されます。このように、プロセスが強制終了されると、PSSはシステム全体に返されるメモリを正確に表さないため、PSSがわずかに誤解を招く可能性があります。

USSは、プロセスの合計プライベートメモリです。つまり、そのプロセスに完全に固有のメモリです。 USSは、特定のプロセスを実行する実際の増分コストを示すため、非常に有用な数値です。プロセスが強制終了されると、USSは実際にシステムに返される合計メモリになります。 USSは、プロセスでメモリリークが最初に疑われるときに監視するのに最適な数値です。

Pythonが利用可能なシステムの場合、smemと呼ばれるこれらのすべてのカテゴリを含むメモリ統計をレポートするNiceツールもあります。

# procrank
procrank
PID      Vss        Rss           Pss         Uss   cmdline
481   31536K   30936K   14337K    9956K  system_server
475   26128K   26128K   10046K    5992K  zygote
526   25108K   25108K    9225K    5384K  Android.process.acore
523   22388K   22388K    7166K    3432K  com.Android.phone
574   21632K   21632K    6109K    2468K  com.Android.settings
521   20816K   20816K    6050K    2776K  jp.co.omronsoft.openwnn
474    3304K    3304K    1097K     624K   /system/bin/mediaserver
37     304K      304K     289K      288K  /sbin/adbd
29     720K      720K     261K      212K  /system/bin/rild
601     412K     412K     225K      216K  procrank
   1     204K     204K     185K      184K  /init
35     388K     388K     182K      172K  /system/bin/qemud
284     384K     384K     160K      148K  top
27     376K     376K     148K      136K  /system/bin/vold
261     332K     332K     123K     112K  logcat
33     396K     396K     105K       80K   /system/bin/keystore
32     316K     316K     100K       88K   /system/bin/installd
269     328K     328K      95K       72K  /system/bin/sh
26     280K     280K      93K       84K   /system/bin/servicemanager
45     304K     304K      91K       80K   /system/bin/qemu-props
34     324K     324K      91K       68K   /system/bin/sh
260     324K     324K      91K       68K   /system/bin/sh
600     324K     324K      91K      68K   /system/bin/sh
25     308K     308K      88K       68K   /system/bin/sh
28     232K     232K      67K       60K   /system/bin/debuggerd
#

しかし、私はこの記事のオリジナルを見つけることができません。この説明が正確かどうか知りたいです。

47
Victor S

それは正しいように聞こえ、ここにある説明とも一致します: http://elinux.org/Android_Memory_Usage

ページから...

  • Vss =仮想セットサイズ
  • Rss =常駐セットサイズ
  • Pss =比例設定サイズ
  • Uss =一意のセットサイズ
22
Skeets