在 Linux CentOS 系统中,VIRT(虚拟内存)、RES(常驻内存)和 SHR(共享内存)是 top 命令中三个关键的内存指标,理解它们的概念和联系对系统监控、性能调优和内存泄漏排查至关重要。以下是三者的详细解释及关联分析:


​1. VIRT(Virtual Memory Size,虚拟内存)​

  • ​定义​​:进程可访问的​​总虚拟内存空间​​,包括:

    • 代码段、数据段、堆(malloc/new 分配)、栈空间。
    • 共享库(如 libc.so)及文件映射(mmap)。
    • ​已申请但未实际使用的内存​​(如未写入的 malloc 分配)。
  • ​特点​​:

    • ​按需增长​​:若进程申请 1GB 内存但仅写入 100MB,VIRT 仍增加 1GB。
    • ​不直接消耗物理内存​​:仅表示地址空间范围,实际占用由 RES 体现。
    • ​公式​​:VIRT = SWAP + RESSWAP 是换出到磁盘的部分)。

​2. RES(Resident Memory Size,常驻内存)​

  • ​定义​​:进程当前​​实际占用的物理内存​​(未被换出到 Swap),包括:

    • 正在使用的堆、栈、代码段。
    • 共享库中​​已被加载到物理内存的部分​​。
  • ​特点​​:

    • ​反映真实资源消耗​​:直接影响系统的物理内存压力。
    • ​按实际使用量增长​​:若仅写入申请的 100MB 内存,RES 仅增长 100MB。
    • ​包含共享内存​​:RES 中的一部分可能被多个进程共享(即 SHR)。
    • ​公式​​:RES = CODE + DATA(代码段 + 数据段)。

​3. SHR(Shared Memory,共享内存)​

  • ​定义​​:RES 中​​被其他进程共享的内存​​,例如:

    • 共享库(如 glibc)的代码段。
    • 通过 shmgetmmap(MAP_SHARED) 创建的共享内存区域。
  • ​特点​​:

    • ​非独占性​​:多个进程共享同一物理内存页,减少整体内存占用。
    • ​统计粒度​​:即使进程仅使用共享库的少量函数,SHR 仍统计整个库的大小。
    • ​可被换出​​:Swap 操作后 SHR 可能降低。

​三者的联系与区别​

​指标​ ​本质​ ​是否独占物理内存​ ​与物理内存的关系​
VIRT 虚拟地址空间总量 包含未映射到物理内存的部分
RES 实际使用的物理内存 是(含共享部分) 直接反映物理内存占用
SHR RES 中的共享部分 被多个进程共享,减少物理内存重复占用
  • ​核心关系​​:

    • RESVIRT 的子集​​:RES 仅包含 VIRT 中已映射到物理内存的部分。
    • SHRRES 的子集​​:共享内存属于 RES,但被多个进程复用。
    • ​进程独占内存计算公式​​:​独占内存 = RES - SHR​。

​如何理解真实内存使用?​

  1. ​识别内存瓶颈​​:

    • RES 过高​​:进程实际占用物理内存多,可能导致系统 OOM(Out-of-Memory)。
    • VIRT 远大于 RES​:进程申请了大量未使用内存(如预分配未写入),通常无需立即优化。
  2. ​共享内存优化​​:

    • SHR 表示共享库使用多,​​多个进程可复用同一库​​,降低整体内存压力。例如,10 个进程共享 100MB 的 libc.soSHR 总计仍为 100MB 而非 1GB。
  3. ​内存泄漏排查​​:

    • RES - SHR(独占内存)持续增长,可能​​存在内存泄漏​​(如未释放的堆分配)。
    • VIRT 异常增长但 RES 不变,可能是​​虚拟地址空间碎片化​​问题。
  4. ​Swap 影响​​:

    • RES 不包括已换出的内存(属于 VIRT 中的 SWAP 部分),​​高 Swap 使用会拖慢性能​​。

​实践建议​

  • ​监控命令​​:

    top -p PID  # 查看进程的 VIRT/RES/SHR
    cat /proc/PID/smaps # 分析内存详细分布(堆、栈、共享库等)
  • ​调优场景​​:

    • ​优化 RES​:减少不必要的缓冲区或缓存(如调整 malloc 策略)。
    • ​利用 SHR​:尽量使用动态链接库而非静态编译,节省物理内存。
    • ​控制 VIRT​:避免过度预分配内存(如 Java 的 -Xmx 设置过大)。

​总结​

  • VIRT​:进程的“内存需求潜力”,​​关注申请量​​。

  • RES​:系统的“真实内存负担”,​​监控实际使用量​​。

  • SHR​:系统的“内存复用效率”,​​优化共享资源​​。

通过分析 RES - SHR 可锁定进程独占内存的异常增长,结合 smaps 文件可深入分析堆、文件映射等区域的使用细节,为性能优化提供精准依据。

Linux VIRT-RES-SHR内存概念理解的更多相关文章

  1. 转 linux进程内存到底怎么看 剖析top命令显示的VIRT RES SHR值

    引 言: top命令作为Linux下最常用的性能分析工具之一,可以监控.收集进程的CPU.IO.内存使用情况.比如我们可以通过top命令获得一个进程使用了多少虚拟内存(VIRT).物理内存(RES). ...

  2. linux进程内存到底怎么看 剖析top命令显示的VIRT RES SHR值

    引 言: top命令作为Linux下最常用的性能分析工具之一,可以监控.收集进程的CPU.IO.内存使用情况.比如我们可以通过top命令获得一个进程使用了多少虚拟内存(VIRT).物理内存(RES). ...

  3. linux ps top 命令 VSZ,RSS,TTY,STAT, VIRT,RES,SHR,DATA的含义【转】

    转自:http://blog.csdn.net/zjc156m/article/details/38920321 http://javawind.net/p131 VIRT:virtual memor ...

  4. linux ps top 命令 VSZ,RSS,TTY,STAT, VIRT,RES,SHR,DATA的含义

    VIRT:virtual memory usage 虚拟内存1.进程“需要的”虚拟内存大小,包括进程使用的库.代码.数据等2.假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而 ...

  5. linux top命令VIRT,RES,SHR,DATA的含义(转)

    linux top命令VIRT,RES,SHR,DATA的含义 字体: 大 小Posted by 佚名 | tags: top  VIRT  RES  SHR VIRT:virtual memory ...

  6. linux top 命令---VIRT,RES,SHR,虚拟内存和物理内存(

    VIRT,RES,SHR,虚拟内存和物理内存(转) VIRT: 1.进程"需要的"虚拟内存大小,包括进程使用的库.代码.数据,以及malloc.new分配的堆空间和分配的栈空间等: ...

  7. 剖析top命令显示的VIRT RES SHR值

    http://yalung929.blog.163.com/blog/static/203898225201212981731971/ http://www.fuzhijie.me/?p=741 引  ...

  8. linux top命令VIRT,RES,SHR,DATA的含义

    VIRT:virtual memory usage 虚拟内存1.进程“需要的”虚拟内存大小,包括进程使用的库.代码.数据等2.假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而 ...

  9. VIRT(虚拟内存)RES(常驻内存)和SHR(共享内存)

    VIRT: 1.进程“需要的”虚拟内存大小,包括进程使用的库.代码.数据,以及malloc.new分配的堆空间和分配的栈空间等: 2.假如进程新申请10MB的内存,但实际只使用了1MB,那么它会增长1 ...

  10. linux top命令查看内存及多核CPU的使用讲述【转】

    转载一下top使用后详细的参数,之前做的笔记找不见了,转载一下,作为以后的使用参考: 原文地址:http://blog.csdn.net/linghao00/article/details/80592 ...

随机推荐

  1. Java从小白到老白⑥

    一. 1.抽象类vs接口 相同 两者都不能实例化,不能new操作 不同 抽象类abstract 接口interface 抽象类可以用部分方法实现 接口所有方法不能有实现 一个类只能继承(extends ...

  2. SpringSecurity配置 1

    spring security整合步骤 过滤器链 SpringSecurity的本质就是一个过滤器链,内部包含了提供各种功能的过滤器,基本案例中的过滤器链如下图所示: UsernamePassword ...

  3. AI对低代码技术的影响

    一.开发效率革命的"双引擎" 在过去的数十年里,软件工程领域正在经历一场由低代码平台和人工智能技术共同驱动的效率革命.这两股技术浪潮虽源于不同的技术路径,却共同指向同一个战略目标: ...

  4. HarmonyNEXT手动申请权限以及使用系统控件获取地址坐标的案例(区别)

    一.手动申请位置权限 1.1.申请位置权限 申请ohos.permission.LOCATION.ohos.permission.APPROXIMATELY_LOCATION权限. "req ...

  5. (包含5w字提示词开源)手把手教你搭建开源提示词优化平台

    前言:为什么要自己搭建? 各位技术同学们,还在为ChatGPT的网络限制而苦恼吗?还在担心敏感数据泄露给第三方吗?今天给大家带来一个超级实用的解决方案--自部署AI提示词优化平台! 想象一下: 数据完 ...

  6. 你应该懂的AI大模型(一) 之 浅知大模型

    1.AI 大模型的训练过程 AI 大模型的训练就如同让一名孩童从不会说话一步步培养成高级知识分子或者专家的过程. 第一步:收集数据,将海量的知识与文章收集起来作为学习资料教给这个孩子: 第二步:预处理 ...

  7. Ant Design Mobile 覆盖默认的样式。

    直接在css中这样写是不行的,完全没有效果. .am-list-item.am-input-item { height: 36px; min-height: 30px; } 要像下面这样,加上glob ...

  8. 接口设计的原则:构建优雅API的完整指南

    接口设计的原则:构建优雅API的完整指南 在软件开发中,接口就像建筑的地基,设计得好坏直接决定了整个系统的稳定性和可维护性.一个优秀的接口设计不仅能提升开发效率,还能降低系统复杂度,让代码更加健壮.今 ...

  9. IDEA热布署报错java.lang.IllegalStateException: Restarter has not been initialized

    *************************** APPLICATION FAILED TO START *************************** Description: Bin ...

  10. 关于用PHP连接Mysql后添加数据,中文变成问号的解决方案

    这主要是编码问题,确认你在网页制作软件时所设定的编码,要与mysql的编码一致就可以解决 问题如下图: 打开这个表的操作页面,按下图设置: 排序规则里设置成你网页的编码方式,注意,要点选下面的Chan ...