Linux的top命令中的VIRT、RES、SHR的意义


搜索关键字:
参考链接:

==

VIRT:virtual memory usage 虚拟内存

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

VIRT -- Virtual Image (kb)
        The  total  amount  of  virtual  memory  used  by the task.  It includes all code, data and shared libraries  plus  pages  that have  been  swapped out and pages that have been mapped but not used.
RES:resident memory usage 常驻内存

1、进程当前使用的内存大小,但不包括swap out
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小

RES -- Resident size (kb)
        The non-swapped physical memory a task has used.
SHR:shared memory 共享内存

1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out后,它将会降下来

SHR -- Shared Mem size (kb)
       The amount of shared memory used by a task.  It simply reflects memory that could be potentially shared with other processes.
DATA

1、数据占用的内存。如果top没有显示,先按f键再按s键可以显示出来。
2、真正的该程序要求的数据空间,是真正在运行中要使用的。

DATA -- Data+Stack size (kb)
        The amount of virtual memory devoted to other  than  executable code, also known as the 'data resident set' size or DRS.

 

,

《 “Linux的top命令中的VIRT、RES、SHR的意义” 》 有 7 条评论

  1. Linux下查看某一个程序运行所占用的内存
    https://blog.csdn.net/rickiyeat/article/details/70230253
    `
    VmRss和VmSize的区别参考:

    VmSize(KB) :虚拟内存大小。整个进程使用虚拟内存大小,是VmLib, VmExe, VmData, 和 VmStk的总和;
    VmRSS(KB):虚拟内存驻留集合大小。这是驻留在物理内存的一部分。它没有交换到硬盘。它包括代码,数据和栈;
    VmData(KB):程序数据段的大小(所占虚拟内存的大小),堆使用的虚拟内存;
    VmStk(KB):任务在用户态的栈的大小,栈使用的虚拟内存;
    VmExe(KB):程序所拥有的可执行虚拟内存的大小,代码段,不包括任务使用的库;
    VmLib(KB) :被映像到任务的虚拟内存空间的库的大小;

    有一种便捷获取VmSize和VmRSS的方法:
    # cat /proc/$pid/statm
    # cat /proc/$pid/status
    # ps -e -o ‘pid,comm,pcpu,rsz,vsz,stime,user’ | grep -v grep | grep “$pid”
    `

  2. 宋宝华:世上最好的共享内存(Linux共享内存最透彻的一篇)
    https://mp.weixin.qq.com/s/03OegJXeISy4llRkj-ew5Q
    `
    共享内存的方式
    1.基于传统SYS V的共享内存;
    2.基于POSIX mmap文件映射实现共享内存;
    3.通过memfd_create()和fd跨进程共享实现共享内存;
    4.多媒体、图形领域广泛使用的基于dma-buf的共享内存。
    `

  3. 为什么 Linux 需要虚拟内存
    https://mp.weixin.qq.com/s/gPX-xvWqrUgRi5VwHok1pA
    `
    操作系统中的 CPU 和主内存(Main memory)都是稀缺资源,所有运行在当前操作系统的进程会共享系统中的 CPU 和内存资源,操作系统会使用 CPU 调度器分配 CPU 时间并引入虚拟内存系统以管理物理内存,本文会分析操作系统为什么需要虚拟内存。

    在回答虚拟内存存在的必要性之前,我们需要理解操作系统中的虚拟内存是什么,它在操作系统中起到什么样的作用。正如软件工程中的其他抽象,虚拟内存是操作系统物理内存和进程之间的中间层,它为进程隐藏了物理内存这一概念,为进程提供了更加简洁和易用的接口以及更加复杂的功能。

    虚拟内存的设计方法可以说是软件工程中的常见手段,通过结合磁盘和内存各自的优势,利用中间层对资源进行更合理地调度充分提高资源的利用率并提供和谐以及统一的抽象,而在实际的业务场景中,类似的缓存逻辑也比较常见。

    操作系统的虚拟内存是非常复杂的组件,没有工程师能够了解其中的全部细节,不过了解虚拟内存的整体设计也很有价值,我们能够从中找到很多软件设计的方法。我们重新回到今天的问题 — Linux 操作系统中为什么需要虚拟内存:
    * 虚拟内存可以结合磁盘和物理内存的优势为进程提供看起来速度足够快并且容量足够大的存储;
    * 虚拟内存可以为进程提供独立的内存空间并引入多层的页表结构将虚拟内存翻译成物理内存,进程之间可以共享物理内存减少开销,也能简化程序的链接、装载以及内存分配过程;
    * 虚拟内存可以控制进程对物理内存的访问,隔离不同进程的访问权限,提高系统的安全性;
    `

  4. 进程间通信方式
    https://www.jianshu.com/p/8e4f9978e5b8

    面试题:进程间通信的方式
    https://blog.csdn.net/wm12345645/java/article/details/82381407
    `
    管道-pipe,
    消息队列-mq,
    共享内存-shared memory,
    信号量-signal,
    socket,
    文件锁-file lock

    共享内存
    1,概念:
    将同一块物理内存一块映射到不同的进程的虚拟地址空间中,实现不同进程间对同一资源的共享。
    共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。

    2,特点:
    1. 不用从用户态到内核态的频繁切换和拷贝数据,直接从内存中读取就可以。
    2. 共享内存是临界资源,所以需要操作时必须要保证原子性。使用信号量或者互斥锁都可以。
    3. 生命周期随内核。
    `
    进程间通信方式总结
    https://www.cnblogs.com/happy4java/p/11343072.html

    进程间的通信方式:简介
    https://zhuanlan.zhihu.com/p/37872762

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注