进程实际内存占用: 私有驻留内存数(Private RSS)介绍

进程实际内存占用: 私有驻留内存数(Private RSS)介绍 

 

先介绍几个基本概念:

SIZE : 进程使用的地址空间, 如果进程映射了100M的内存, 进程的地址空间将报告为100M内存. 事实上, 这个大小不是一个程序实际使用的内存数.

RSS : "Resident Set Size", 实际驻留"在内存中"的内存数. 不包括已经交换出去的代码. 举一个例子: 如果你有一个程序使用了100K内存, 操作系统交换出40K内存, 那么RSS为60K. RSS还包括了与其它进程共享的内存区域. 这些区域通常用于libc库等.

SHARE : RSS中与其它进程共享的内存部分大小.

VMSIZE : 一个进程占用的总的地址空间大小. 它包括了没有映射到内存中的页面.

Private RSS : 映射到内存中的页面, 这些页面仅由进程单独使用. 这也是我们最关心地方: 进程实际占用的内存数.

如何来查看Private RSS呢? /proc接口中每一个进程目录下的smaps提供了private rss信息. smaps是在2.6.16内核版本引进来的.

私有驻留内存数(Private RSS):
查看/proc/$pid/smaps

下面我以本站使用的Fedora Core 5为例, 查看进程号1293(vmware-guestd, 本站使用的是一台基于vmware的客户虚拟机, 微睦独立主机 )使用的Private RSS数.

CODE:
# cat /proc/ 1293 /smaps
00111000 - 00112000 rwxp 00111000 00 : 00 0
Size:                  4 kB
Rss:                  4 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:        0 kB
Private_Dirty:        4 kB
0050e000-0050f000 rwxp 0050e000 00 : 00 0
Size:                  4 kB
Rss:                  0 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:        0 kB
Private_Dirty:        0 kB
0051a000-0051b000 r-xp 0051a000 00 : 00 0           [ vdso ]
Size:                  4 kB
Rss:                  4 kB
Shared_Clean:          4 kB
Shared_Dirty:          0 kB
Private_Clean:        0 kB
Private_Dirty:        0 kB
0051b000- 00534000 r-xp 00000000 fd: 00 194898      /lib/ld- 2 . 4 . so
Size:                100 kB
Rss:                  0 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:        0 kB
Private_Dirty:        0 kB
00534000 - 00535000 r-xp 00018000 fd: 00 194898      /lib/ld- 2 . 4 . so
Size:                  4 kB
Rss:                  0 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:        0 kB
Private_Dirty:        0 kB
00535000 - 00536000 rwxp 00019000 fd: 00 194898      /lib/ld- 2 . 4 . so
Size:                  4 kB
Rss:                  0 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:        0 kB
Private_Dirty:        0 kB
00538000 - 00665000 r-xp 00000000 fd: 00 194905      /lib/libc- 2 . 4 . so
Size:              1204 kB
Rss:                212 kB
Shared_Clean:        204 kB
Shared_Dirty:          0 kB
Private_Clean:        8 kB
Private_Dirty:        0 kB
00665000 - 00667000 r-xp 0012d000 fd: 00 194905      /lib/libc- 2 . 4 . so
Size:                  8 kB
Rss:                  8 kB
Shared_Clean:          4 kB
Shared_Dirty:          0 kB
Private_Clean:        0 kB
Private_Dirty:        4 kB
00667000 - 00668000 rwxp 0012f000 fd: 00 194905      /lib/libc- 2 . 4 . so
Size:                  4 kB
Rss:                  4 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:        0 kB
Private_Dirty:        4 kB
00668000 -0066b000 rwxp 00668000 00 : 00 0
Size:                12 kB
Rss:                  8 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:        0 kB
Private_Dirty:        8 kB
08047000 - 08062000 r-xp 00000000 fd: 00 292327      /usr/sbin/vmware-guestd
Size:                108 kB
Rss:                  64 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:        64 kB
Private_Dirty:        0 kB
08062000 - 08063000 rwxp 0001a000 fd: 00 292327      /usr/sbin/vmware-guestd
Size:                  4 kB
Rss:                  4 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:        0 kB
Private_Dirty:        4 kB
08063000 - 08068000 rwxp 08063000 00 : 00 0
Size:                20 kB
Rss:                  12 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:        0 kB
Private_Dirty:        12 kB
08385000 - 08886000 rwxp 08385000 00 : 00 0           [ heap ]
Size:              5124 kB
Rss:                5080 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:        0 kB
Private_Dirty:      5080 kB
bfeb2000-bfec7000 rwxp bfeb2000 00 : 00 0           [ stack ]
Size:                84 kB
Rss:                  12 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:        0 kB
Private_Dirty:        12 kB

上面我们看到从smaps看不太方便, 推荐使用Ben Maurer写的perl脚本 : (本地下载 )

下面是由seme.pl脚本解析的smaps数据:

首先安装Linux::Smaps模块:
perl -MCPAN -e 'install Linux::Smaps'

然后用seme.pl解析1293进程的Smaps数据:

CODE:
# ./smem. pl 1293
VMSIZE:        7200 kb
RSS:          1052 kb total
                192 kb shared
                100 kb private clean
                760 kb private dirty
PRIVATE MAPPINGS
     vmsize   rss clean   rss dirty   file
    5636 kb        8 kb      724 kb    [ heap ]
      84 kb        0 kb        12 kb    [ stack ]
        4 kb        0 kb        4 kb
        8 kb        0 kb        4 kb   /lib/libc- 2 . 4 . so
        4 kb        0 kb        4 kb   /lib/libc- 2 . 4 . so
      12 kb        4 kb        4 kb
        4 kb        0 kb        4 kb   /usr/sbin/vmware-guestd
      20 kb        8 kb        4 kb
    1204 kb        16 kb        0 kb   /lib/libc- 2 . 4 . so
      108 kb        64 kb        0 kb   /usr/sbin/vmware-guestd

SHARED MAPPINGS
     vmsize   rss clean   rss dirty   file
    1204 kb      188 kb        0 kb   /lib/libc-2 .4 .so
       4 kb        4 kb        0 kb   [ vdso]

从上面看到rss大小被分成了两个部分: private(私有)和shared(共享).
private rss就是我们最关心的进程实际占用的内存数.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值