博客
关于我
linux内存管理之RSS和VSZ的区别
阅读量:795 次
发布时间:2023-02-03

本文共 1175 字,大约阅读时间需要 3 分钟。

Linux内存管理中的RSS和VSZ区别解析

在Linux内存管理中,RSS和VSZ是两个常见的内存概念,但它们的定义和用途存在显著区别。理解这些概念对于优化程序性能和故障排查至关重要。

RSS(Resident Set Size,常驻内存大小)

RSS表示进程占用的物理内存大小。它仅包括进程当前使用的内存块,包括堆、栈以及动态链接库加载到物理内存中的部分。值得注意的是,RSS不包含已经被交换出的内存。例如,一个进程可能在物理内存中占用了100K的内存,而实际使用的内存可能更大,因为部分内存可能已经被交换到磁盘中。

VSZ(Virtual Memory Size,虚拟内存大小)

VSZ则表示进程的虚拟内存总量。这包括进程所能访问的所有内存区域,包括:

  • 已交换的内存:这些内存已经被移动到磁盘中,但进程仍然可以通过虚拟地址访问。
  • 未使用的内存:进程申请的内存区域,但尚未实际使用。
  • 动态链接库内存:进程链接的动态库所占用的内存。
  • 简单来说,VSZ反映的是进程从操作系统申请的所有内存总量,而RSS只显示进程当前占用的物理内存。

    例子说明

    假设进程A的二进制文件大小为500K,链接了一个2500K的动态库,堆和栈共使用了200K内存,其中100K在内存中,其余的可能已被交换或不再使用。进程加载了动态库中的1000K内容以及二进制文件中的400K内容至内存中。

    • RSS:400K(二进制文件)+ 1000K(动态库)+ 100K(堆和栈)= 1500K
    • VSZ:500K(二进制文件)+ 2500K(动态库)+ 200K(堆和栈)= 3200K

    PSS(Proportional Set Size,成比例内存大小)

    PSS是一种新兴的内存度量方法,用于更精确地衡量动态链接库所占用的内存。它将动态库内存按比例分配。例如,若动态库被两个进程共享:

    • PSS:400K(二进制文件)+ (1000K/2)(动态库)+ 100K(堆和栈)= 400K + 500K + 100K = 1000K

    线程内存共享

    在一个进程中,多个线程共享相同的地址空间。因此,一个进程中的所有线程,其RSS、VSZ和PSS值完全相同。这也解释了为什么使用pstop命令时,进程列表中每个线程的内存信息看起来完全一致。

    内存管理的实际意义

    了解RSS、VSZ和PSS的区别对于程序性能调优和内存管理至关重要。例如,一个程序可能在启动时预先申请大量内存,但实际使用时可能只有少部分内存被利用。这种情况下,RSS会随着时间增加,而VSZ保持不变。这提示我们需要定期审查内存使用情况,以释放未使用的内存。

    此外,PSS的引入为内存管理提供了更精确的度量工具,特别是在内存共享场景下,可以更合理地分配和管理内存资源。

    如果需要进一步了解这些概念,可以参考相关技术文档或在线资源。

    转载地址:http://ttzfk.baihongyu.com/

    你可能感兴趣的文章
    Linux学习总结(64)——DBA常用的Linux命令汇总
    查看>>
    Linux学习总结(65)——Linux 服务器安全强化的七个步骤
    查看>>
    Linux学习总结(66)——CentOS7操作系统SSH安全加固
    查看>>
    Linux学习总结(67)——shell脚本中$0 $1 $# $@ $* $? $ 等总结
    查看>>
    Linux学习总结(68)——Linux 30年专访:Linus Torvalds谈Linux内核开发与Git
    查看>>
    Linux学习总结(69)——Linux 生成随机数的6种方法
    查看>>
    Linux学习总结(6)——CenterOS7安装mysql5.5的方法
    查看>>
    Linux学习总结(6)——CenterOS7安装mysql5.5的方法
    查看>>
    Linux学习总结(70)——Bash 脚本中常用的内置变量汇总
    查看>>
    Linux学习总结(71)——Linux 管理面板哪家强?云帮手、APPNODE 还是宝塔?
    查看>>
    Linux学习总结(72)——Linux系统安全加固
    查看>>
    Linux学习总结(73)——Linux高频命令大总结
    查看>>
    Linux学习总结(74)——wget 命令详解
    查看>>
    Linux学习总结(75)—— Linux history 命令实用技巧
    查看>>
    Linux学习总结(76)—— Shell 脚本日志技巧
    查看>>
    Linux学习总结(77)—— Shell 开发运维经验总结
    查看>>
    Linux学习总结(78)—— 常见开源协议讲解
    查看>>
    Linux学习总结(79)—— Shell 编程规范
    查看>>
    Linux学习总结(7)——阿里云centeros服务器上安装 jdk,tomcat,mysql
    查看>>
    Linux学习总结(7)——阿里云centeros服务器上安装 jdk,tomcat,mysql
    查看>>