Monday, December 6, 2021

[Linux系統效能分析] VSS/RSS/PSS/USS

1. 虛擬內存與物理內存

物理內存對於進程來說是透明的,進程直接操作的是虛擬內存。

而數據和代碼是存放在真實的物理內存的,之所以進程在虛擬內存中尋址可以獲取數據,是因為虛擬內存與物理內存存在著映射關係。

内存占用大小

VSS >= RSS >= PSS >= USS


 VSS - Virtual Set Size 虛擬耗用記憶體(包含共享庫佔用的記憶體)

 RSS - Resident Set Size 實際使用實體記憶體(包含共享庫佔用的記憶體,含棧記憶體和堆記憶體

 PSS - Proportional Set Size 實際使用的實體記憶體(PSS相對於RSS計算共享庫內存大小是按比例的。N個進程共享,該庫對PSS大小的貢獻只有1/N。PSS計算更加科學,除了自己獨占的內存,再加上分到的共享部分)

 USS - Unique Set Size 程序獨自佔用的實體記憶體(不包含共享庫佔用的記憶體)

  VSZ是 Virtual Memory Size (包含了程序所能訪問的所有記憶體,包含了被換出的記憶體,被分配但是還沒有被使用的記憶體,以及動態庫中的記憶體)


  PID      Vss      Rss      Pss      Uss  cmdline
  190   79560K   74736K   49624K   43604K  system_server
14335   55776K   55740K   31308K   26676K  com.android.launcher2
13074   47408K   47380K   24947K   22428K  com.android.settings


假設程序A的二進位制檔案是500K,並且連結了一個2500K的動態庫,堆和棧共使用了200K,其中100K在記憶體中(剩下的被換出或者不再被使用),一共載入了動態庫中的1000K內容以及二進位制檔案中的400K內容至記憶體中,那麼:

RSS: 400K + 1000K + 100K = 1500K 

VSZ: 500K + 2500K 200K = 3200K


前面例子中的動態庫如果是被兩個程序使用

PSS: 400K + (1000K/2) + 100K = 400K + 500K + 100K = 1000K





Reference:

https://www.twblogs.net/a/5cbf2b04bd9eee397113c09e

No comments:

Post a Comment

n8n index

 【n8n免費本地端部署】Windows版|程式安裝x指令大補帖  【一鍵安裝 n8n】圖文教學,獲得無限額度自動化工具&限時免費升級企業版功能