前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VSZ与RSS

VSZ与RSS

作者头像
glinuxer
发布2019-04-10 14:55:06
8.6K0
发布2019-04-10 14:55:06
举报
文章被收录于专栏:专注网络研发

使用ps命令查看进程的内存使用情况时,有3列输出,分别是%MEM、VSZ和RSS,其中VSZ全称为Virtual Memory Size,RSS全称为Resident Set Size,而MEM则是RSS占全部内存的百分比。

为什么要用两列VSZ和RSS表示进程的内存使用量呢?从它们两个名称上,就可以窥见一二。VSZ表示虚拟内存大小,RSS表示驻留物理内存的内存大小。前者VSZ并没有真正占用物理内存,只是划分了地址空间,并没有建立虚拟地址与物理内存的映射——这也是Linux常用的优化方法,如COW,都是在真正需要的时候,才分配资源。所以当查看哪个进程占用内存过多时,我们只要查看RSS列,而非VSZ。因为某些服务经常一启动就申请了大量的内存,但实际并没有使用,代表服务如java虚拟机。

下图是一个来自阿里ECS的截图:

其中红线指向的第5列和第6列分别为VSZ和RSS,其值分别为2G+和74M+。

接下来,我们自己编码测试VSZ和RSS。

在这个简单的代码中,函数alloc_mem用于循环512次,每次申请1M的内存,一共申请512M内存。执行的时候,没有任何参数时,则只申请内存,但不对该内存做任何写入操作,当参数个数大于等于一个时,通过memset向内存填充0值。

第一次执行的时候,不带任何参数,ps输出如下:

VSZ的大小是539M,而RSS只有3M。可见,尽管应用申请了内存,但因为没有使用,实际上并没有占用什么资源。

第二次执行的时候,使用一个参数,ps输出如下:

这时,VSZ大小不变,仍然是539M,而RSS则增加到了527M。由于使用memset对申请的内存执行了写入操作,所以内核必须要真正分配给该应用物理内存了。

PS: 测试代码位于https://github.com/gfreewind/LinuxDetails/blob/master/mem/1.vsz_and_rss/vsz_and_rss.cpp

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 LinuxerPub 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档