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,表明系統爲其分配了虛擬內存,可是沒有分配物理內存若是有數字,則表明系統爲其分配了物理內存,以及有多少個進程引用了這個頁固然,不會有負數出現