轉自:https://www.jianshu.com/p/9bf36aa82f90
RSS 是常駐內存集(Resident Set Size),表示該進程分配的內存大小。
RSS 不包括進入交換分區的內存。
RSS 包括共享庫佔用的內存(只要共享庫在內存中)
RSS 包括所有分配的棧內存和堆內存。
VSZ 表示進程分配的虛擬內存。
VSZ 包括進程可以訪問的所有內存,包括進入交換分區的內容,以及共享庫佔用的內存。
如果一個進程,程序的大小有 500K,鏈接的共享庫大小有 2500K,堆棧內存共有 200K,其中 100K 進入了交換分區。
進程實際加載了共享庫中的 1000K 的內容,以及自己程序的中的 400K 的內容。請問 RSS 和 VSZ 應是多少?
RSS: 400K + 1000K + 100K = 1500K
VSZ: 500K + 2500K + 200K = 3200K
RSS 中有一部分來自共享庫,而共享庫可能被許多進程使用,所以如果把所有進程的 RSS 加起來,可能比系統內存還要大。
有一個較新的參數 PSS (proportional set size),它對於共享內存的計算與 RSS 不同。參考前面的例子,如果有兩個進程使用同一個共享庫,那麼:
PSS: 400K + (1000K/2) + 100K = 400K + 500K + 100K = 1000K
線程共享同一個地址空間,所以一個進程內部的所有線程有相同的 RSS, VSZ 和 PSS。可使用 ps 或者 top 命令觀察這些信息。
There is way more to it than this, to learn more check the following references:
http://manpages.ubuntu.com/manpages/en/man1/ps.1.html
https://web.archive.org/web/20120520221529/http://emilics.com/blog/article/mconsumption.html
Also see:
原文連接:
https://stackoverflow.com/questions/7880784/what-is-rss-and-vsz-in-linux-memory-management