linux的memmap函数_linux /proc下的statm、maps、memmap 内存信息文件分析
ls /proc 能看到一些數(shù)字命名的文件夾,這些數(shù)字就是對(duì)于進(jìn)程的pid
[[email?protected] proc]# cat /proc/1/statm
487 185 133 31 0 67 0
很簡(jiǎn)單地返回7組數(shù)字,每一個(gè)的單位都是一頁(yè) (常見(jiàn)的是4KB)
分別是
size:任務(wù)虛擬地址空間大小
Resident:正在使用的物理內(nèi)存大小
Shared:共享頁(yè)數(shù)
Trs:程序所擁有的可執(zhí)行虛擬內(nèi)存大小
Lrs:被映像倒任務(wù)的虛擬內(nèi)存空間的庫(kù)的大小
Drs:程序數(shù)據(jù)段和用戶(hù)態(tài)的棧的大小
dt:臟頁(yè)數(shù)量
接下來(lái)看看maps
[[email?protected] 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列
第一列代表內(nèi)存段的虛擬地址
第二列代表執(zhí)行權(quán)限,r,w,x不必說(shuō),p=私有 s=共享
不用說(shuō),heap和stack段不應(yīng)該有x,否則就容易被xx,不過(guò)這個(gè)跟具體的版本有關(guān)
第三列代表在進(jìn)程地址里的偏移量
第四列映射文件的主設(shè)備號(hào)和次設(shè)備號(hào)
通過(guò) cat /proc/devices
得知fd是253 device-mapper
第五列映像文件的節(jié)點(diǎn)號(hào),即inode
第六列是映像文件的路徑
以前我很奇怪怎么會(huì)有兩個(gè)相同的文件路徑,原來(lái)
08048000-08067000 r-xp 00000000 fd:00 843075 ? ? /sbin/init
08067000-08068000 rw-p 0001e000 fd:00 843075 ? ? /sbin/init
一個(gè)是只讀的,是代碼段,一個(gè)是讀寫(xiě)的,是數(shù)據(jù)段
至于為什么共享庫(kù)分成了三個(gè)
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
可惜不是所有的版本都有這個(gè)文件,如同我這里的情況
只有口頭說(shuō)一說(shuō)了,memmap需要和maps配合看
顯示出來(lái)的每一行代表maps里的一個(gè)段
每一行的每一個(gè)數(shù)字,代表那個(gè)段里的一個(gè)頁(yè),段有多大,一行就有對(duì)應(yīng)的多少個(gè)數(shù)字
如果這個(gè)數(shù)字是0,代表系統(tǒng)為其分配了虛擬內(nèi)存,但是沒(méi)有分配物理內(nèi)存
如果有數(shù)字,則代表系統(tǒng)為其分配了物理內(nèi)存,以及有多少個(gè)進(jìn)程引用了這個(gè)頁(yè)
當(dāng)然,不會(huì)有負(fù)數(shù)出現(xiàn)
總結(jié)
以上是生活随笔為你收集整理的linux的memmap函数_linux /proc下的statm、maps、memmap 内存信息文件分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 银行流水是不是全国都可以打
- 下一篇: 信用卡刷了钱没到账怎么办