Linux的VIRT,RES,SWAP

top命令的结果显示了系统的实时性能状态,其中关于memory的相关项,默认有 VIRT, RES, SHARE 等,那么这些项的结果到底怎么理解呢? 最好的解释还是看man 帮助文档:

       o: 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.

          VIRT = SWAP + RES.


       p: SWAP  --  Swapped size (kb)
          The swapped out portion of a task's total virtual memory image.


       q: RES  --  Resident size (kb)
          The non-swapped physical memory a task has used.

          RES = CODE + DATA.

这里分享下个人对其中几个概念的理解

  1. 程序地址空间: 当程序在磁盘上存储的时候,我们可以用相应的工具来分析文件结构,这个时候显示的地址是 程序文件中描述 的地址空间, 比如用 readelf 命令来查看一个elf文件的信息,其中的地址都属于 程序地址空间;
  2. 内存虚拟地址空间(VIRT): 磁盘上的程序要运行,都需要载入内存,这时候就出现了内存虚拟地址空间,一般内存虚拟地址空间和 程序地址空间是不同的,一条申请内存空间的语句,在程序地址空间中可能仅仅占用 几个字节的 code而已 , 但是 在虚拟内存地址空间中则可能对应了很多MB的内存访问地址; 对于一个进程(运行状态的程序)而言,其可以访问的内存虚拟地址空间的大小一般都是随着代码的运行而发生变化的(进程可以根据需要申请更大的空间,也可以根据情况释放掉不需要的空间),而这个变化的内存虚拟地址空间 就是上述的VIRT。 也就是说,VIRT代表了进程当前可以访问的地址空间的范围, 而 可以作为内存地址访问的空间有两类:物理内存 和 虚拟内存。 所以上述公式中: VIRT= SWAP+RES, VIRT 和程序地址空间没有关系,更和程序文件的大小没有关系; 而从内存空间的属性上来说,有进程自己的私有访问空间,也有共享的内存空间,所以VIRT也是 进程私有内存访问空间 和 进程占用的共享内存空间的总和.
  3. SWAP 和 RES: 理解了上面的VIRT, 那么SWAP就表示 那部分存储在swap分区上的大小. 而RES 就表示 使用的物理内存的大小. 这里需要注意的是: 一个进程占用的RES的大小包含了改进程单独使用的RES, 同时也包含了系统共享的内存空间,所以要判断一个进程独自占用的物理内存的大小,需要用RES 减去 其占用的共享内存的RES部分 4. 查看进程更详细的内存使用情况: A. 用top 命令可以调出 data, code... 等使用情况,也可以查看major page fault, min page fault 等 B. 通过ps 命令的rsz option 来输出内存的使用情况; C. cat /proc/[PID]/status 来查看 内存的相关情况, 其实该命令的结果不止是显示内存,内存信息是其内容的一小部分; D. 如果要查看内存的mapping 关系,可以通过 : cat /proc/[PID]/maps 来获得; 同时也可以用命令 pmap -x PID 来查看; E. 如果需要查看每一个mapping的更详细的memory 分配信息,用 cat /proc/[PID]/smaps

本文原创,转载请著名出处.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python中更新字典对象

    最近用python做了一个小工具,涉及到如下的字典操作,特做笔记如下: 1. 用update方法更新字典: 用字典的update方法,这时候传递给updat...

    qsjs
  • find命令-prune 参数引起的思考

    prune这个英文单词的意思是:修剪,裁剪;在find 命令中的 -prune 参数引申为: 排除的意思; 查看man 帮助文档有下面的一段内容:

    qsjs
  • bash 中冷门但非常有用的命令: trap

    trap 属于bash的内置命令,所以查看帮助用: help trap, 如果用”man trap“则会跳出bash的帮助文档; trap命令的作用是:对捕获...

    qsjs
  • 把经典的ABAP webdynpro应用配置到SAP Fiori Launchpad里

    假设我们在ES5系统里有一个ABAP webdynpro应用,想配置到SAP Fiori Launchpad里,首先在SAP Cloud Platform上创建...

    Jerry Wang
  • 【OCP最新题库解析(052)--题50】 Which two are true about space

    该系列专题为2018年4月OCP-052考题变革后的最新题库。题库为小麦苗解答,若解答有不对之处,可留言,也可联系小麦苗进行修改。

    小麦苗DBA宝典
  • Golang 语言范围(Range)

    Go 语言中 range 关键字用于for循环中迭代数组(array)、切片(slice)、链表(channel)或集合(map)的元素。在数组和切片中它返回元...

    李海彬
  • 【Go 语言社区】Go 语言范围(Range)

    Go 语言中 range 关键字用于for循环中迭代数组(array)、切片(slice)、链表(channel)或集合(map)的元素。在数组和切片中它返回元...

    李海彬
  • Go 语言范围(Range)

    Go 语言中 range 关键字用于for循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元...

    李海彬
  • Go 语言范围(Range)

    Go 语言中 range 关键字用于for循环中迭代数组(array)、切片(slice)、链表(channel)或集合(map)的元素。在数组和切片中它返回元...

    李海彬
  • ajaxfileupload上传文件和报错syntaxerror: Unexpected end of input(…)

    jQuery插件AjaxFileUpload可以实现ajax文件上传,下载地址:http://www.phpletter.com/contents/ajaxfi...

    仙士可

扫码关注云+社区

领取腾讯云代金券