溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

進(jìn)程內(nèi)存使用PSS和VSZ的區(qū)別

發(fā)布時(shí)間:2021-09-14 13:52:20 來源:億速云 閱讀:159 作者:柒染 欄目:編程語言

進(jìn)程內(nèi)存使用PSS和VSZ的區(qū)別,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

可以使用 ps aux 命令獲取每進(jìn)程的內(nèi)存使用,其中VSZ表示虛擬內(nèi)存使用大小,RSS(resident set size)表示常駐內(nèi)存的大小,來自于/proc/PID/status文件。

~ # ps aux | head
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.4  0.1  18984  1968 ?        Ss   10:58   0:47 /sbin/hello
root         2  0.0  0.0      0     0 ?        S    10:58   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    10:58   0:10 [ksoftirqd/0]

但RSS并不代表進(jìn)程的實(shí)際內(nèi)存消耗,因?yàn)椴煌倪M(jìn)程之間會共享內(nèi)存,所以把所有進(jìn)程RSS進(jìn)行累加的方法會重復(fù)計(jì)算共享內(nèi)存,得到的結(jié)果是偏大的。正確的方式是累加/proc/PID/smaps中的Pss(process's proportional share of this mapping)字段。選取某個(gè)vma的統(tǒng)計(jì)數(shù)據(jù):

01e70000-01ef6000 rw-p 00000000 00:00 0                                  [heap]
Size:                536 kB
Rss:                 408 kB
Pss:                 408 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:       408 kB
Referenced:          408 kB
Anonymous:           408 kB
AnonHugePages:         0 kB
ShmemPmdMapped:        0 kB
Shared_Hugetlb:        0 kB
Private_Hugetlb:       0 kB
Swap:                  0 kB
SwapPss:               0 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
Locked:                0 kB
VmFlags: rd wr mr mw me ac sd

每個(gè)虛擬內(nèi)存區(qū)域(VMA)是一個(gè)連續(xù)的虛擬地址范圍,并且它們不會重疊。一個(gè)vm_area_struct實(shí)例完整的描述了一個(gè)內(nèi)存區(qū)域,包括起止地址、訪問權(quán)限標(biāo)志以及用于指出被映射文件(如果存在)的vm_file字段。其中,size表示這段虛擬空間的大小,Rss表示駐留內(nèi)存的大小,Pss表示分?jǐn)偤蟮膬?nèi)存大小,Referenced表示總共被引用或被訪問的內(nèi)存大小,Anonymous表示沒有映射到文件的內(nèi)存大小,Swap也是匿名內(nèi)存,表示交換分區(qū)內(nèi)存的大小。各個(gè)字段的關(guān)系如下:

USS = Private_Clean + Private_Dirty
Pss = USS + (Shared_Clean + Shared_Dirty)/n
RSS = USS + Shared_Clean + Shared_Dirty

以hello進(jìn)程為例,使用前面介紹的統(tǒng)計(jì)內(nèi)存的數(shù)據(jù):

使用ps
~ # ps aux | grep /sbin/hello
root      1182  0.7  0.2 474208  5636 ?        Sl   11:00   1:38 /sbin/hello
grep -w Pss /proc/1182/smaps | awk 'BEGIN{sum=0} {sum+=$2} END {print "total mem:"sum}'
total mem:1752

可以看到,RSS與PSS相差非常大。進(jìn)程的內(nèi)存統(tǒng)計(jì)一定是使用Pss。

關(guān)于進(jìn)程內(nèi)存使用PSS和VSZ的區(qū)別問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI