AndroidメモリのVSS/RSS/PSS/USS
2768 ワード
Terms
VSS-Virtual Set Size仮想消費メモリ(共有ライブラリが使用するメモリを含む)RSS-Resident Set Size物理メモリ(共有ライブラリで使用するメモリを含む)を実際に使用
PSS-P r o portional Set Sizeが実際に使用する物理メモリ(共有ライブラリで使用されるメモリの割合)USS-Unique Set Sizeプロセスが独自に使用する物理メモリ(共有ライブラリが使用しないメモリ)一般的にメモリ使用量には、VSS>=RSS>=PSS>=USSという法則があります.
Overview
この記事の目的は、Linuxプロセスが実際にメモリを使用していることについて、さまざまなツールからエクスポートされたレポートを理解することです.
Androidにはprocrank(/system/xbin/procrank)というツールがあり、Linuxプロセスのメモリ使用量を高から低までリストできます.各プロセスは大きさによってVSS,RSS,PSS,USSに分けることができる.
説明を簡単にするために、以下のメモリは「バイト」ではなく「ページ」として表されます.Linuxシステムのメモリ管理の最下位レベルのページは4096バイトです.
VSS(reported as VSZ from ps)は、プロセスが合計でアクセスできるアドレス空間である.そのサイズには、RAMにない可能性のあるメモリも含まれます(たとえば、mallocはスペースを割り当てていますが、まだ書き込まれていません).VSSは、1つのプロセスの実際のメモリ使用量を判断するために使用されることは少ない.
RSSは、プロセスがRAMに実際に格納する総メモリである.しかし、RSSは、プロセスが使用するすべての共有ライブラリのサイズを示すだけで、どのプロセスが共有ライブラリを使用しても、メモリにロードされるのは1回だけです.したがって、RSSは、単一プロセスのメモリ使用量を正確に反映することはできません.
PSSはRSSとは異なり、使用する共有ライブラリを比例して表します.たとえば、3つのプロセスが1つの共有ライブラリを使用している場合、合計30ページのメモリが消費されます.では、PSSは、各プロセスが共有ライブラリ10ページのサイズを占有していると考えられる.PSSは非常に有用なデータです.システム内のすべてのプロセスのPSSが加算されると、システム内の合計メモリが反映されます.一方、プロセスが破棄されると、共有ライブラリの割合のPSSの一部が占有され、残りのライブラリを使用するプロセスに再び割合で割り当てられます.これにより、PSSは、プロセスが破棄された後、PSSがグローバルシステムに返されるメモリ(the memory returned to the overall system)を正確に表すことができないため、PSSが誤解を招く可能性がある.
USSはプロセスが消費するプライベートメモリです.つまり、プロセスが独占するメモリです.USSは、特定のプロセスを実行する実際の境界コスト(増分コスト)を反映するため、非常に有用なデータです.プロセスが破棄されると、USSは実際にシステムに返されるメモリです.プロセス中に不審なメモリ漏洩がある場合、USSは最適な観察データです.
システムがPythonをサポートしている場合、メモリ以上の分類の統計を報告できるsmemというツールがあります.
# procrank procrank
VSS-Virtual Set Size仮想消費メモリ(共有ライブラリが使用するメモリを含む)RSS-Resident Set Size物理メモリ(共有ライブラリで使用するメモリを含む)を実際に使用
PSS-P r o portional Set Sizeが実際に使用する物理メモリ(共有ライブラリで使用されるメモリの割合)USS-Unique Set Sizeプロセスが独自に使用する物理メモリ(共有ライブラリが使用しないメモリ)一般的にメモリ使用量には、VSS>=RSS>=PSS>=USSという法則があります.
Overview
この記事の目的は、Linuxプロセスが実際にメモリを使用していることについて、さまざまなツールからエクスポートされたレポートを理解することです.
Androidにはprocrank(/system/xbin/procrank)というツールがあり、Linuxプロセスのメモリ使用量を高から低までリストできます.各プロセスは大きさによってVSS,RSS,PSS,USSに分けることができる.
説明を簡単にするために、以下のメモリは「バイト」ではなく「ページ」として表されます.Linuxシステムのメモリ管理の最下位レベルのページは4096バイトです.
VSS(reported as VSZ from ps)は、プロセスが合計でアクセスできるアドレス空間である.そのサイズには、RAMにない可能性のあるメモリも含まれます(たとえば、mallocはスペースを割り当てていますが、まだ書き込まれていません).VSSは、1つのプロセスの実際のメモリ使用量を判断するために使用されることは少ない.
RSSは、プロセスがRAMに実際に格納する総メモリである.しかし、RSSは、プロセスが使用するすべての共有ライブラリのサイズを示すだけで、どのプロセスが共有ライブラリを使用しても、メモリにロードされるのは1回だけです.したがって、RSSは、単一プロセスのメモリ使用量を正確に反映することはできません.
PSSはRSSとは異なり、使用する共有ライブラリを比例して表します.たとえば、3つのプロセスが1つの共有ライブラリを使用している場合、合計30ページのメモリが消費されます.では、PSSは、各プロセスが共有ライブラリ10ページのサイズを占有していると考えられる.PSSは非常に有用なデータです.システム内のすべてのプロセスのPSSが加算されると、システム内の合計メモリが反映されます.一方、プロセスが破棄されると、共有ライブラリの割合のPSSの一部が占有され、残りのライブラリを使用するプロセスに再び割合で割り当てられます.これにより、PSSは、プロセスが破棄された後、PSSがグローバルシステムに返されるメモリ(the memory returned to the overall system)を正確に表すことができないため、PSSが誤解を招く可能性がある.
USSはプロセスが消費するプライベートメモリです.つまり、プロセスが独占するメモリです.USSは、特定のプロセスを実行する実際の境界コスト(増分コスト)を反映するため、非常に有用なデータです.プロセスが破棄されると、USSは実際にシステムに返されるメモリです.プロセス中に不審なメモリ漏洩がある場合、USSは最適な観察データです.
システムがPythonをサポートしている場合、メモリ以上の分類の統計を報告できるsmemというツールがあります.
# 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
#