深入解析Linux进程内存:VSS、RSS、PSS、USS及查看方式

阅读: 评论:0

深入解析Linux进程内存:VSS、RSS、PSS、USS及查看方式

深入解析Linux进程内存:VSS、RSS、PSS、USS及查看方式

VSS

虚拟耗用内存大小,是进程可以访问的所有虚拟内存的总量,包括进程独自占用的物理内存、和其他进程共享的内存、分配但未使用的内存。

RSS

驻留内存大小,是进程当前实际占用的物理内存大小,包括进程独自占用的物理内存、和其他进程共享的内存。

PSS

比例驻留内存大小,包括进程独自占用的物理内存、比例分配和其他进程共享的内存(共享库内存会均分到各个共享进程)。

USS

独立内存大小,表示进程独自占用、不与其他进程共享的物理内存。

图解

Linux进程内存查看方式

ps命令

ps命令可以获取进程的VSS、RSS、内存使用率,其中:

  1. VSZ列表示的VSS,单位是KB;
  2. RSS列的单位是KB;
  3. %MEM列表示的是内存使用率,是进程RSS与系统总物理内存的比值;
[root@localhost ~]# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0 128620  4484 ?        Ss    2022 228:42 /usr/lib/systemd/systemd
root         2  0.0  0.0      0     0 ?        S     2022   1:47 [kthreadd]
root         3  0.0  0.0      0     0 ?        S     2022  20:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<    2022   0:00 [kworker/0:0H]
......
postgres 31940  0.0  0.0 251780  1256 ?        Ss   May19   1:31 postgres: logger

top命令

top命令可以获取进程的VSS、RSS,其中:

  1. VIRT列表示的是VSS,单位是KB;
  2. RES列表示的是RSS,单位是KB;
[root@localhost ~]# top
top - 20:48:34 up 561 days,  9:34,  2 users,  load average: 0.40, 0.80, 1.18
Tasks: 302 total,   1 running, 301 sleeping,   0 stopped,   0 zombie
%Cpu(s):  6.1 us,  0.8 sy,  0.0 ni, 92.8 id,  0.0 wa,  0.0 hi,  0.2 si,  0.0 st
KiB Mem : 16425244 total,   560044 free, 12011580 used,  3853620 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  1632372 avail MemPID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND1 root      20   0  492728   4540   1548 S   0.0  0.0 133:41.72 systemd2 root      20   0       0      0      0 S   0.0  0.0   0:11.53 kthreadd31940 postgres  20   0  251780   1256    712 S   0.0  0.0   1:31.24 postmaster

smem命令

smem命令可以获取进程的RSS、PSS、USS,单位是KB。

[root@node-2 ~]# smemPID User     Command                         Swap      USS      PSS      RSS
31940 postgres postgres: logger                 876      100      126     1260

pmap命令

pmap命令可以获取进程的VSS,RSS,其中:

  1. Kbytes列表示的VSS,单位是KB;
  2. RSS列的单位是KB;
[root@node-2 ~]# pmap -x 31940
31940:   postgres: logger
Address           Kbytes     RSS   Dirty Mode  Mapping
0000000000400000    7392     216       0 r-x-- postgres
0000000000d37000       4       4       4 
---------------- ------- ------- -------
total kB          251784    1260     548

查看进程状态文件

通过查看进程的状态文件,可以获取进程的VSS、RSS,其中:

  1. VmSize表示的是VSS;
  2. VmRSS表示的是RSS;
[root@node-2 ~]# cat /proc/31940/status
Name:   postmaster
Umask:  0077
State:  S (sleeping)
Tgid:   31940
Ngid:   0
Pid:    31940
PPid:   31938
TracerPid:      0
Uid:    26      26      26      26
Gid:    26      26      26      26
FDSize: 64
Groups: 26
VmPeak:   454540 kB
VmSize:   251780 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:      2132 kB
VmRSS:      1256 kB
RssAnon:             544 kB
RssFile:             712 kB
RssShmem:              0 kB
VmData:     1040 kB
VmStk:       132 kB
VmExe:      7392 kB
VmLib:     38308 kB
VmPTE:       236 kB
VmSwap:      876 kB
Threads:        1
SigQ:   0/64052
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000001307806
SigCgt: 00000001a0000201
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 0000001fffffffff
CapAmb: 0000000000000000
NoNewPrivs:     0
Seccomp:        0
Speculation_Store_Bypass:       vulnerable
Cpus_allowed:   f
Cpus_allowed_list:      0-3
Mems_allowed:   00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list:      0
voluntary_ctxt_switches:        1320418
nonvoluntary_ctxt_switches:     70

通过查看进程的smaps文件,可以获取进程每个内存映射块的详细信息,求和可以得到进程的RSS、PSS、USS,其中:

  1. Private_Clean和Private_Dirty表示进程的私有、不可共享的已清洁(Clean)和已脏(Dirty)内存大小,将这两个值相加即可得到USS。
[root@node-2 ~]# cat /proc/31940/smaps | grep 'Rss' | awk '{Total+=$2} END {print Total"KB"}'
1260KB
[root@node-2 ~]# cat /proc/31940/smaps | grep 'Pss' | awk '{Total+=$2} END {print Total"KB"}'
126KB
[root@node-2 ~]# cat /proc/31940/smaps | grep 'Private' | awk '{Total+=$2} END {print Total"KB"}'
100KB

参考

Process Memory Management in Linux | Baeldung on Linux

本文发布于:2024-01-28 16:44:07,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17064314508823.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:进程   内存   方式   Linux   VSS
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23