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

2024-01-18 10:10

本文主要是介绍深入解析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 r---- postgres......
---------------- ------- ------- -------
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

这篇关于深入解析Linux进程内存:VSS、RSS、PSS、USS及查看方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/618714

相关文章

虚拟机与物理机的文件共享方式

《虚拟机与物理机的文件共享方式》文章介绍了如何在KaliLinux虚拟机中实现物理机文件夹的直接挂载,以便在虚拟机中方便地读取和使用物理机上的文件,通过设置和配置,可以实现临时挂载和永久挂载,并提供... 目录虚拟机与物理机的文件共享1 虚拟机设置2 验证Kali下分享文件夹功能是否启用3 创建挂载目录4

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

Linux之软件包管理器yum详解

《Linux之软件包管理器yum详解》文章介绍了现代类Unix操作系统中软件包管理和包存储库的工作原理,以及如何使用包管理器如yum来安装、更新和卸载软件,文章还介绍了如何配置yum源,更新系统软件包... 目录软件包yumyum语法yum常用命令yum源配置文件介绍更新yum源查看已经安装软件的方法总结软

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

Linux:alias如何设置永久生效

《Linux:alias如何设置永久生效》在Linux中设置别名永久生效的步骤包括:在/root/.bashrc文件中配置别名,保存并退出,然后使用source命令(或点命令)使配置立即生效,这样,别... 目录linux:alias设置永久生效步骤保存退出后功能总结Linux:alias设置永久生效步骤

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

Mybatis官方生成器的使用方式

《Mybatis官方生成器的使用方式》本文详细介绍了MyBatisGenerator(MBG)的使用方法,通过实际代码示例展示了如何配置Maven插件来自动化生成MyBatis项目所需的实体类、Map... 目录1. MyBATis Generator 简介2. MyBatis Generator 的功能3