Terms
- VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
- RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
- PSS - Proportional 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 很少被用于判断一个进程的真实内存使用量。
RSS 是一个进程在RAM中真实存储的总内存。但是RSS还是可能会造成误导,因为它仅仅表示该进程所使用的所有共享库的大小,它不管有多少个进程使用该共享库,该共享库仅被加载到内存一次。所以RSS并不能准确反映单进程的内存占用情况。
PSS 与RSS不同,它按比例表示使用的共享库, 例如:如果有三个进程都使用了一个共享库,共占用了30页内存。那么PSS将认为每个进程分别占用该共享库10页的大小。 PSS是非常有用的数据,因为系统中所有进程的PSS都相加的话,就刚好反映了系统中的总共占用的内存。 而当一个进程被销毁之后, 其占用的共享库那部分比例的PSS,将会再次按比例分配给余下使用该库的进程。这样PSS可能会造成一点的误导,因为当一个进程被销毁后,PSS不能准确地表示返回给全局系统的内存(the
memory returned to the overall system)。
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
- #
|