linux /proc下的statm、maps、memmap 内存信息文件分析

ls /proc 能看到一些数字命名的文件夹,这些数字就是对于进程的pid

[root@localhost proc]# cat /proc/1/statm487 185 133 31 0 67 0很简单地返回7组数字,每个的单位都是一页 (常见的是4KB)分别是size:任务虚拟地址空间大小Resident:正在使用的物理内存大小Shared:共享页数Trs:程序所拥有的可执行虚拟内存大小Lrs:被映像倒任务的虚拟内存空间的库的大小Drs:程序数据段和用户态的栈的大小dt:脏页数量接下来看看maps[root@localhost proc]# cat /proc/1/maps00110000-00111000 r-xp 00110000 00:00 0          [vdso]0032b000-00347000 r-xp 00000000 fd:00 852733     /lib/ld-2.8.so00347000-00348000 r--p 0001c000 fd:00 852733     /lib/ld-2.8.so00348000-00349000 rw-p 0001d000 fd:00 852733     /lib/ld-2.8.so0034b000-004ae000 r-xp 00000000 fd:00 852734     /lib/libc-2.8.so004ae000-004b0000 r--p 00163000 fd:00 852734     /lib/libc-2.8.so004b0000-004b1000 rw-p 00165000 fd:00 852734     /lib/libc-2.8.so004b1000-004b4000 rw-p 004b1000 00:00 0 08048000-08067000 r-xp 00000000 fd:00 843075     /sbin/init08067000-08068000 rw-p 0001e000 fd:00 843075     /sbin/init08b42000-08b6a000 rw-p 08b42000 00:00 0          [heap]b8046000-b8048000 rw-p b8046000 00:00 0 bfb4e000-bfb63000 rw-p bffeb000 00:00 0          [stack]一共有6列第一列表明内存段的虚拟地址第二列表明执行权限,r,w,x没必要说,p=私有 s=共享不用说,heap和stack段不该该有x,不然就容易被xx,不过这个跟具体的版本有关第三列表明在进程地址里的偏移量第四列映射文件的主设备号和次设备号经过 cat /proc/devices得知fd是253 device-mapper第五列映像文件的节点号,即inode第六列是映像文件的路径之前我很奇怪怎么会有两个相同的文件路径,原来08048000-08067000 r-xp 00000000 fd:00 843075     /sbin/init08067000-08068000 rw-p 0001e000 fd:00 843075     /sbin/init一个是只读的,是代码段,一个是读写的,是数据段至于为何共享库分红了三个0034b000-004ae000 r-xp 00000000 fd:00 852734     /lib/libc-2.8.so004ae000-004b0000 r--p 00163000 fd:00 852734     /lib/libc-2.8.so004b0000-004b1000 rw-p 00165000 fd:00 852734     /lib/libc-2.8.so其中的004ae000-004b0000 r--p 00163000 fd:00 852734     /lib/libc-2.8.so仍是不能理解最后看看神秘的memmap惋惜不是全部的版本都有这个文件,如同我这里的状况只有口头说一说了,memmap须要和maps配合看显示出来的每一行表明maps里的一个段每一行的每个数字,表明那个段里的一个页,段有多大,一行就有对应的多少个数字若是这个数字是0,表明系统为其分配了虚拟内存,可是没有分配物理内存若是有数字,则表明系统为其分配了物理内存,以及有多少个进程引用了这个页固然,不会有负数出现

相关文章
相关标签/搜索