结合/proc 的maps 理解top命令的VIRT 参数

在top命令的结果中,有一个VIRT 的输出项,这个项的官方解释如下:

VIRT  --  Virtual Memory Size (KiB)
           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.

从字面理解,就是一个task占用的虚拟内存的大小,包括代码,数据,共享库,swap out的pages,以及mapped 了但是还没有used 的pages.
而我们已经知道,这里page的概念其实是内存的“页”,内存采用分页机制;所以,简单来说,VIRT就是代码,数据,共享库以及map为内存可以访问的其他数据,无论这些数据是在物理内存还是在虚拟内存,只要是已经Map为内存可以访问的,那么都算数. 那具体来说,上述的数据都map了哪些文件,哪些内存地址呢? 其实可以在 proc 中找出的;

先说结论,然后做个简单的验证:

VIRT的大小,等于/proc/maps的大小的综合,而map对应的文件的大小,可以通过 /proc/map_files进行计算,这个值和maps 中的文件相关项计算出来的大小是一致的,而剩下的非文件相关的则是: heap, stack ...,也就是说VIRT的大小,其实就是已经map的文件的大小加上堆,栈, 以及其他的空间等;而其他空间则主要是堆空间的大小,另外还有栈空间...
验证过程如下:

  1. 在/proc/{PID}/maps 下面,就表示当前的task已经进了map的地址空间,我们可以验证下这些空间总的大小,默认是KB,方法如下:
root:8094# head maps                #我们看这个文件的前10行内容,其中第一列就是map的内存地址空间;
55f319b10000-55f319dc8000 r-xp 00000000 fd:02 403346422                  /usr/bin/vim
55f319fc7000-55f319fd6000 r--p 002b7000 fd:02 403346422                  /usr/bin/vim
55f319fd6000-55f319ff0000 rw-p 002c6000 fd:02 403346422                  /usr/bin/vim
55f319ff0000-55f31a000000 rw-p 00000000 00:00 0 
55f31b7f6000-55f31bb35000 rw-p 00000000 00:00 0                          [heap]
7fbf0b2fa000-7fbf0b305000 r-xp 00000000 fd:02 960898                     /usr/lib64/libnss_files-2.28.so
7fbf0b305000-7fbf0b505000 ---p 0000b000 fd:02 960898                     /usr/lib64/libnss_files-2.28.so
7fbf0b505000-7fbf0b506000 r--p 0000b000 fd:02 960898                     /usr/lib64/libnss_files-2.28.so
7fbf0b506000-7fbf0b507000 rw-p 0000c000 fd:02 960898                     /usr/lib64/libnss_files-2.28.so
7fbf0b507000-7fbf0b50d000 rw-p 00000000 00:00 0 
root:8094# cat maps  | awk '{print $1}' | awk -F'[-]' '{s=strtonum("0x"$1);e=strtonum("0x"$2);sum+=e-s}END{print sum/1024}'         #计算maps下总的已经map的大小;单位是KB. 
257600
  1. 看下top 下该进程占用的空间大小:
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  6.8 us,  3.2 sy,  0.0 ni, 88.7 id,  0.0 wa,  0.8 hi,  0.5 si,  0.0 st
MiB Mem :   7704.4 total,   2043.3 free,   2798.0 used,   2863.1 buff/cache
MiB Swap:   7708.0 total,   7708.0 free,      0.0 used.   4025.6 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                    
   8094 root      20   0  257596   9128   5508 S   0.0   0.1   0:00.06 vim                                                                        
  1. 对于两者之间的差距,top 显示VIRT是257596, 而 cat /proc/8094/maps ,然后计算得到的结果是257600, 刚好相差一个4KB,这个是一个PAGE, 出现这个的原因是page 对齐导致的;在实际的map过程中,因为对齐的原因,所以占用的实际空间多了一个PAGE, 在这个例子中是一个PAGE, 不一定在其他的例子中也是一个PAGE,但是应该都是4KB的整数倍;
  2. 计算/proc/{PID}/file_maps下map的空间大小,可以发现这个大小和 maps下的文件相关的大小是一致的;
  3. 堆空间不一定是连续的,而栈空间则是连续的;堆空间依靠函数调用来申请,而栈空间则系统自动管理;用户程序代码申请的空间一般都是堆空间;

上述的/proc/maps 描述了map的大致情形,但是对于每一个不同的map, 内存是如何分配的呢?
这时候可以通过/proc/{PID}/smaps来获得

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容

  • TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该...
    canyoungerz阅读 958评论 0 0
  • 前言 内存管理一向是所有操作系统书籍不惜笔墨重点讨论的内容,无论市面上或是网上都充斥着大量涉及内存管理的教材和资料...
    木有sky阅读 907评论 0 1
  • 本文包括如下三部分: 基本介绍与输出介绍 第一行基础信息讲解 详细信息讲解3.1 Size3.2 Rss3.3 P...
    墨染书阅读 27,038评论 0 16
  • 背景介绍 由于业务需求,需要将应用程序的内存占用降下来。我们是采用pss这个指标来衡量内存占用的,这个指标衡量应用...
    吴卓锐阅读 559评论 0 0
  • 第十一章 内核的数据类型 坚持使用严格的数据类型,并且使用-Wall -Wstrict-prototypes选...
    xiaozi63阅读 356评论 0 0