經常使用top命令了解進程信息,其中包括內存方面的信息。命令top幫助文檔是這麼解釋各個字段的。
VIRT , Virtual Image (kb)
RES, Resident size (kb)
SHR, Shared Mem size (kb)
%MEM, Memory usage(kb)
SWAP, Swapped size (kb)
CODE, Code size (kb)
DATA, Data+Stack size (kb)
nFLT, Page Fault count
nDRT, Dirty Pages count
盡管有注釋,但依然感覺有些晦澀,不知所指何意?
正在運行的程序,叫進程。每個進程都有完全屬於自己的,獨立的,不被干擾的內存空間。此空間,被分成幾個段(Segment),分別是Text, Data, BSS, Heap, Stack。用戶進程內存空間,也是系統內核分配給該進程的VM(虛擬內存),但並不表示這個進程占用了這麼多的RAM(物理內存)。這個空間有多大?命令top輸出的VIRT值告訴了我們各個進程內存空間的大小(進程內存空間隨著程序的執行會增大或者縮小)。你還可以通過/proc//maps,或者pmap –d 了解某個進程內存空間都分布,比如:
#cat /proc/1449/maps … 0012e000-002a4000 r-xp 00000000 08:07 3539877 /lib/i386-linux-gnu/libc-2.13.so 002a4000-002a6000 r--p 00176000 08:07 3539877 /lib/i386-linux-gnu/libc-2.13.so 002a6000-002a7000 rw-p 00178000 08:07 3539877 /lib/i386-linux-gnu/libc-2.13.so 002a7000-002aa000 rw-p 00000000 00:00 0 … 08048000-0875b000 r-xp 00000000 08:07 4072287 /usr/local/mysql/libexec/mysqld 0875b000-0875d000 r--p 00712000 08:07 4072287 /usr/local/mysql/libexec/mysqld 0875d000-087aa000 rw-p 00714000 08:07 4072287 /usr/local/mysql/libexec/mysqld … PS:線性地址,訪問權限, offset, 設備號,inode,映射文件