Linux进程虚拟内存和物理内存
先介绍几个基本概念: 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): 下面我以本站使用的Linux AS5为例, 查看进程号1293(vmware-guestd, 本站使用的是一台基于vmware的客户虚拟机,)使用的Private RSS数. 下面是由seme.pl脚本解析的smaps数据: 首先安装Linux::Smaps模块: 然后用seme.pl解析1293进程的Smaps数据: SHARED MAPPINGS 从上面看到rss大小被分成了两个部分: private(私有)和shared(共享). http://hi.baidu.com/youngtao/blog/item/70621d83c72933a50cf4d29a.html
查看/proc/$pid/smaps
perl -MCPAN -e 'install Linux::Smaps'//需要网络,如无法上网,则可下载压缩包解压到 /root
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
vmsize rss clean rss dirty file
1204?kb?188?kb?0?kb /lib/libc-2.4.so
4?kb?4?kb?0?kb?[vdso]
private rss就是我们最关心的进程实际占用的内存数.
?