zoukankan      html  css  js  c++  java
  • linux /proc下的statm、maps、memmap 内存信息文件分析

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

    [root@localhost proc]# cat /proc/1/statm
    487 185 133 31 0 67 0

    很简单地返回7组数字,每一个的单位都是一页 (常见的是4KB)
    分别是
    size:任务虚拟地址空间大小
    Resident:正在使用的物理内存大小
    Shared:共享页数
    Trs:程序所拥有的可执行虚拟内存大小
    Lrs:被映像倒任务的虚拟内存空间的库的大小
    Drs:程序数据段和用户态的栈的大小
    dt:脏页数量


    接下来看看maps
    [root@localhost proc]# cat /proc/1/maps
    00110000-00111000 r-xp 00110000 00:00 0          [vdso]
    0032b000-00347000 r-xp 00000000 fd:00 852733     /lib/ld-2.8.so
    00347000-00348000 r--p 0001c000 fd:00 852733     /lib/ld-2.8.so
    00348000-00349000 rw-p 0001d000 fd:00 852733     /lib/ld-2.8.so
    0034b000-004ae000 r-xp 00000000 fd:00 852734     /lib/libc-2.8.so
    004ae000-004b0000 r--p 00163000 fd:00 852734     /lib/libc-2.8.so
    004b0000-004b1000 rw-p 00165000 fd:00 852734     /lib/libc-2.8.so
    004b1000-004b4000 rw-p 004b1000 00:00 0 
    08048000-08067000 r-xp 00000000 fd:00 843075     /sbin/init
    08067000-08068000 rw-p 0001e000 fd:00 843075     /sbin/init
    08b42000-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/init
    08067000-08068000 rw-p 0001e000 fd:00 843075     /sbin/init
    一个是只读的,是代码段,一个是读写的,是数据段
    至于为什么共享库分成了三个
    0034b000-004ae000 r-xp 00000000 fd:00 852734     /lib/libc-2.8.so
    004ae000-004b0000 r--p 00163000 fd:00 852734     /lib/libc-2.8.so
    004b0000-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,代表系统为其分配了虚拟内存,但是没有分配物理内存
    如果有数字,则代表系统为其分配了物理内存,以及有多少个进程引用了这个页
    当然,不会有负数出现

  • 相关阅读:
    安全编码1
    VPP tips
    VPP概述汇总
    C语言安全编码摘录
    TCP-proxy
    Scipy Lecture Notes学习笔记(一)Getting started with Python for science 1.4. Matplotlib: plotting
    Scipy Lecture Notes学习笔记(一)Getting started with Python for science 1.3. NumPy: creating and manipulating numerical data
    Scipy Lecture Notes学习笔记(一)Getting started with Python for science 1.2. The Python language
    Scipy Lecture Notes学习笔记(一)Getting started with Python for science 1.1. Python scientific computing ecosystem
    25马5跑道,求最快的五匹马的需要比赛的次数
  • 原文地址:https://www.cnblogs.com/eliu/p/8398525.html
Copyright © 2011-2022 走看看