# procrank PID Vss Rss Pss Uss Swap PSwap USwap ZSwap cmdline 1546 23119064K 434772K 246374K 221424K 26896K 25795K 25776K 8547K system_server 2195 18248184K 348776K 180992K 166788K 27548K 26431K 26412K 8758K com.android.systemui ... 1108 10797196K 3268K 65K 44K 648K 648K 648K 214K /system/bin/thermald ------ ------ ------ ------ ------ ------ ------ 1850510K 1456516K 699812K 624553K 620960K 206964K TOTAL ZRAM: 208520K physical used for 629248K in swap (4194300K total swap) RAM: 10989740K total, 343872K free, 10312K buffers, 7536160K cached, 20688K shmem, 487084K slab
1. VSS:
Virtual Set Size 虛擬耗用內存(包含共享庫占用的內存)
VSS表示一個進程可訪問的全部內存地址空間的大小。這個大小包括了進程已經申請但尚未使用的內存空間。在實際中很少用這種方式來表示進程占用內存的情況,用它來表示單個進程的內存使用情況是不准確的。
此大小還包括可能不駐留在RAM中的內存,如已分配但未寫入的malloc。 VSS對於確定進程的實際內存使用非常少用。
2. RSS:
Resident Set Size 實際使用物理內存(包含共享庫占用的內存)
表示一個進程在RAM中實際使用的空間地址大小,包括了全部共享庫占用的內存,這種表示進程占用內存的情況也是不准確的。
RSS可能會產生誤導,因為它報告進程使用的所有共享庫的總數,即使共享庫只加載到內存中一次,無論有多少進程使用它。 RSS也不是單個進程的內存使用的准確表示。
3. PSS:
Proportional Set Size 實際使用的物理內存(比例分配共享庫占用的內存)
表示一個進程在RAM中實際使用的空間地址大小,它按比例包含了共享庫占用的內存。假如有3個進程使用同一個共享庫,那么每個進程的PSS就包括了1/3大小的共享庫內存。這種方式表示進程的內存使用情況較准確,但當只有一個進程使用共享庫時,其情況和RSS一模一樣。
當一個進程被銷毀時,其占用的那部分PSS又會被按比例地分配給其余使用這些庫的進程。
4. USS:
Unique Set Size 進程獨自占用的物理內存(不包含共享庫占用的內存)
表示一個進程本身占用的內存空間大小,不包含其它任何成分,這是表示進程內存大小的最好方式!
USS是一個非常有用的數字,因為它表示運行特定進程的真正內存增量成本。當進程被終止時,USS是實際返回到系統的總內存。 USS是判斷進程中的內存泄漏時最值得注意的數字。
總結:
一般來說內存占用大小有如下規律:VSS >= RSS >= PSS >= USS