RSS 是常駐內(nèi)存集(Resident Set Size),表示該進程分配的內(nèi)存大小。
RSS 不包括進入交換分區(qū)的內(nèi)存。
RSS 包括共享庫占用的內(nèi)存(只要共享庫在內(nèi)存中)
RSS 包括所有分配的棧內(nèi)存和堆內(nèi)存。
VSZ 表示進程分配的虛擬內(nèi)存。
VSZ 包括進程可以訪問的所有內(nèi)存,包括進入交換分區(qū)的內(nèi)容,以及共享庫占用的內(nèi)存。
如果一個進程,程序的大小有 500K,鏈接的共享庫大小有 2500K,堆棧內(nèi)存共有 200K,其中 100K 進入了交換分區(qū)。
進程實際加載了共享庫中的 1000K 的內(nèi)容,以及自己程序的中的 400K 的內(nèi)容。請問 RSS 和 VSZ 應(yīng)是多少?
RSS: 400K + 1000K + 100K = 1500K
VSZ: 500K + 2500K + 200K = 3200K
RSS 中有一部分來自共享庫,而共享庫可能被許多進程使用,所以如果把所有進程的 RSS 加起來,可能比系統(tǒng)內(nèi)存還要大。
有一個較新的參數(shù) PSS (proportional set size),它對于共享內(nèi)存的計算與 RSS 不同。參考前面的例子,如果有兩個進程使用同一個共享庫,那么:
PSS: 400K + (1000K/2) + 100K = 400K + 500K + 100K = 1000K
線程共享同一個地址空間,所以一個進程內(nèi)部的所有線程有相同的 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