Linux 內存管理中的 RSS 和 VSZ

轉自: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/118307/a-way-to-determine-a-processs-real-memory-usage-i-e-private-dirty-rss

原文連接:
https://stackoverflow.com/questions/7880784/what-is-rss-and-vsz-in-linux-memory-management

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章