博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
进程实际内存占用: 私有驻留内存数(Private RSS)介绍
阅读量:4222 次
发布时间:2019-05-26

本文共 3850 字,大约阅读时间需要 12 分钟。

进程实际内存占用: 私有驻留内存数(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写的 : (本地 )

下面是由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就是我们最关心的进程实际占用的内存数.

转载地址:http://usqmi.baihongyu.com/

你可能感兴趣的文章
[图文] Seata AT 模式分布式事务源码分析
查看>>
pm 源码分析
查看>>
Sending the User to Another App
查看>>
kmsg_dump
查看>>
Getting a Result from an Activity
查看>>
Allowing Other Apps to Start Your Activity
查看>>
dev/mem
查看>>
pfn_valid 源码分析
查看>>
dev/kmem 和dev/mem的区别
查看>>
test-definitions/blob/master/auto-test/bigdata/bigdata.sh
查看>>
/test-definitions/blob/master/auto-test/blktrace/blktrace.sh
查看>>
test-definitions/blob/master/auto-test/blogbench/blogbench.sh
查看>>
test-definitions/blob/master/auto-test/boost/boost.sh
查看>>
Java多态性理解
查看>>
Intellij Idea 工具在java文件中怎么避免 import .*包,以及import包顺序的问题
查看>>
IDEA Properties中文unicode转码问题
查看>>
Oracle中Blob转换成Clob
查看>>
Linux如何查看so中函数名
查看>>
自动管理代码的android.mk
查看>>
cocos2dx 2.2.6编译记录(1)
查看>>