VSS
虛擬耗用內(nèi)存大小,是進程可以訪問的所有虛擬內(nèi)存的總量,包括進程獨自占用的物理內(nèi)存、和其他進程共享的內(nèi)存、分配但未使用的內(nèi)存。
RSS
駐留內(nèi)存大小,是進程當前實際占用的物理內(nèi)存大小,包括進程獨自占用的物理內(nèi)存、和其他進程共享的內(nèi)存。
PSS
比例駐留內(nèi)存大小,包括進程獨自占用的物理內(nèi)存、比例分配和其他進程共享的內(nèi)存(共享庫內(nèi)存會均分到各個共享進程)。
USS
獨立內(nèi)存大小,表示進程獨自占用、不與其他進程共享的物理內(nèi)存。
圖解
Linux進程內(nèi)存查看方式
ps命令
ps命令可以獲取進程的VSS、RSS、內(nèi)存使用率,其中:
- VSZ列表示的VSS,單位是KB;
- RSS列的單位是KB;
- %MEM列表示的是內(nèi)存使用率,是進程RSS與系統(tǒng)總物理內(nèi)存的比值;
[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,其中:
- VIRT列表示的是VSS,單位是KB;
- 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 Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 492728 4540 1548 S 0.0 0.0 133:41.72 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:11.53 kthreadd
31940 postgres 20 0 251780 1256 712 S 0.0 0.0 1:31.24 postmaster
smem命令
smem命令可以獲取進程的RSS、PSS、USS,單位是KB。
[root@node-2 ~]# smem
PID User Command Swap USS PSS RSS
31940 postgres postgres: logger 876 100 126 1260
pmap命令
pmap命令可以獲取進程的VSS,RSS,其中:
- Kbytes列表示的VSS,單位是KB;
- 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 r---- postgres
......
---------------- ------- ------- -------
total kB 251784 1260 548
查看進程狀態(tài)文件
通過查看進程的狀態(tài)文件,可以獲取進程的VSS、RSS,其中:
- VmSize表示的是VSS;
- 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文件,可以獲取進程每個內(nèi)存映射塊的詳細信息,求和可以得到進程的RSS、PSS、USS,其中:文章來源:http://www.zghlxwxcb.cn/news/detail-616129.html
- Private_Clean和Private_Dirty表示進程的私有、不可共享的已清潔(Clean)和已臟(Dirty)內(nèi)存大小,將這兩個值相加即可得到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文章來源地址http://www.zghlxwxcb.cn/news/detail-616129.html
到了這里,關(guān)于深入解析Linux進程內(nèi)存:VSS、RSS、PSS、USS及查看方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!