千家信息网

进程内存使用PSS和VSZ的区别

发表于:2025-01-30 作者:千家信息网编辑
千家信息网最后更新 2025年01月30日,进程内存使用PSS和VSZ的区别,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。可以使用 ps aux 命令获取每进程的内存使用,其中
千家信息网最后更新 2025年01月30日进程内存使用PSS和VSZ的区别

进程内存使用PSS和VSZ的区别,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

可以使用 ps aux 命令获取每进程的内存使用,其中VSZ表示虚拟内存使用大小,RSS(resident set size)表示常驻内存的大小,来自于/proc/PID/status文件。

~ # ps aux | headUSER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMANDroot         1  0.4  0.1  18984  1968 ?        Ss   10:58   0:47 /sbin/helloroot         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并不代表进程的实际内存消耗,因为不同的进程之间会共享内存,所以把所有进程RSS进行累加的方法会重复计算共享内存,得到的结果是偏大的。正确的方式是累加/proc/PID/smaps中的Pss(process's proportional share of this mapping)字段。选取某个vma的统计数据:

01e70000-01ef6000 rw-p 00000000 00:00 0                                  [heap]Size:                536 kBRss:                 408 kBPss:                 408 kBShared_Clean:          0 kBShared_Dirty:          0 kBPrivate_Clean:         0 kBPrivate_Dirty:       408 kBReferenced:          408 kBAnonymous:           408 kBAnonHugePages:         0 kBShmemPmdMapped:        0 kBShared_Hugetlb:        0 kBPrivate_Hugetlb:       0 kBSwap:                  0 kBSwapPss:               0 kBKernelPageSize:        4 kBMMUPageSize:           4 kBLocked:                0 kBVmFlags: rd wr mr mw me ac sd

每个虚拟内存区域(VMA)是一个连续的虚拟地址范围,并且它们不会重叠。一个vm_area_struct实例完整的描述了一个内存区域,包括起止地址、访问权限标志以及用于指出被映射文件(如果存在)的vm_file字段。其中,size表示这段虚拟空间的大小,Rss表示驻留内存的大小,Pss表示分摊后的内存大小,Referenced表示总共被引用或被访问的内存大小,Anonymous表示没有映射到文件的内存大小,Swap也是匿名内存,表示交换分区内存的大小。各个字段的关系如下:

USS = Private_Clean + Private_DirtyPss = USS + (Shared_Clean + Shared_Dirty)/nRSS = USS + Shared_Clean + Shared_Dirty

以hello进程为例,使用前面介绍的统计内存的数据:

使用ps~ # ps aux | grep /sbin/helloroot      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相差非常大。进程的内存统计一定是使用Pss。

关于进程内存使用PSS和VSZ的区别问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

0