RSS是Resident Set Size(常駐內(nèi)存大小)的縮寫,用于表示進(jìn)程使用了多少內(nèi)存(RAM中的物理內(nèi)存),RSS不包含已經(jīng)被換出的內(nèi)存。RSS包含了它所鏈接的動(dòng)態(tài)庫(kù)并且被加載到物理內(nèi)存中的內(nèi)存。RSS還包含棧內(nèi)存和堆內(nèi)存。
VSZ是Virtual Memory Size(虛擬內(nèi)存大小)的縮寫。它包含了進(jìn)程所能訪問的所有內(nèi)存,包含了被換出的內(nèi)存,被分配但是還沒有被使用的內(nèi)存,以及動(dòng)態(tài)庫(kù)中的內(nèi)存。
假設(shè)進(jìn)程A的二進(jìn)制文件是500K,并且鏈接了一個(gè)2500K的動(dòng)態(tài)庫(kù),堆和棧共使用了200K,其中100K在內(nèi)存中(剩下的被換出或者不再被使用),一共加載了動(dòng)態(tài)庫(kù)中的1000K內(nèi)容以及二進(jìn)制文件中的400K內(nèi)容至內(nèi)存中,那么:
RSS: 400K + 1000K + 100K = 1500K
VSZ: 500K + 2500K + 200K = 3200K
由于部分內(nèi)存是共享的,被多個(gè)進(jìn)程使用,所以如果將所有進(jìn)程的RSS值加起來可能會(huì)大于系統(tǒng)的內(nèi)存總量。
申請(qǐng)過的內(nèi)存如果程序沒有實(shí)際使用,則可能不顯示在RSS里。比如說一個(gè)程序,預(yù)先申請(qǐng)了一大批內(nèi)存,過了一段時(shí)間才使用,你會(huì)發(fā)現(xiàn)RSS會(huì)增長(zhǎng)而VSZ保持不變。
還有一個(gè)概念是PSS,它是proportional set size(proportional是成比例的意思)的縮寫。這是一種新的度量方式。它將動(dòng)態(tài)庫(kù)所使用的內(nèi)存按比例劃分。比如我們前面例子中的動(dòng)態(tài)庫(kù)如果是被兩個(gè)進(jìn)程使用,那么:
PSS: 400K + (1000K/2) + 100K = 400K + 500K + 100K = 1000K
一個(gè)進(jìn)程中的多個(gè)線程共享同樣的地址空間。所以一個(gè)進(jìn)程中的多個(gè)線程的RSS,VSZ,PSS是完全相同的。linux下可以使用ps或者top命令查看這些信息。
如果想了解更多,可參考下面的鏈接:
- http://manpages.ubuntu.com/manpages/en/man1/ps.1.html
- https://web.archive.org/web/20120520221529/
- http://emilics.com/blog/article/mconsumption.html
- A way to determine a process's "real" memory usage, i.e. private dirty RSS?
英文原文: What is RSS and VSZ in Linux memory management
原文鏈接: https://pengrl.com/p/21292/
原文出處: yoko blog (https://pengrl.com)
原文作者: yoko
版權(quán)聲明: 本文歡迎任何形式轉(zhuǎn)載,轉(zhuǎn)載時(shí)完整保留本聲明信息(包含原文鏈接、原文出處、原文作者、版權(quán)聲明)即可。本文后續(xù)所有修改都會(huì)第一時(shí)間在原始地址更新。
本篇文章由一文多發(fā)平臺(tái)ArtiPub自動(dòng)發(fā)布