一、准備知識
Linux和Windows系統在內存管理機制方面有很大的不同。在Linux中經常發現空閒內存很少,似乎所有的內存都被系統占用了,表面感覺是內存不夠用了,其實不然。這是Linux內存管理的一個優秀特性,在這方面,區別於Windows的內存管理。主要特點是,無論物理內存有多大,Linux都將其充份利用,將一些程序調用過的硬盤數據讀入內存,利用內存讀寫的高速特性來提高Linux系統的數據訪問性能。而Windows是只在需要內存時,才為應用程序分配內存,並不能充分利用大容量的內存空間。
在Linux系統中,還有一個交換分區的概念。交換分區的作用是將系統內核暫時不用的內存塊信息換入交換分區,從而釋放物理內存。而當又需要使用這部分數據時,有可將該部分信息從交換分區換入物理內存。
(1)、系統會不時的進行頁面交換操作,以保持盡可能多的空閒物理內存,即使並沒有什麼事情需要內存,Linux也會交換出暫時不用的內存頁面。這可以避免等待交換所需的時間。
(2)、頁面交換式依據某種“LRU”算法。
二、內存監控命令--free
free命令用於顯示系統中使用的和空閒的內存數量。看一下man page中對free命令的描述:“free命令用於顯示系統中物理內存的使用和空閒情況及交換分區的使用和空閒情況。”
#語法 free [-b | -k | -m | -g | -h] [-o] [-s delay ] [-c count ] [-a] [-t] [-l] [-V] #選項 -b:顯示內存的單位為字節 -k:顯示內存的單位為 KB -m:顯示內存的單位為 M -o:忽略-/+ buffers/cache行 -t:總和信息 -s<時間>:每隔指定時間執行一次命令,單位為s -h:以可讀形式顯示容量,需要free -V顯示版本大於3.3 -V:版本信息三、free命令輸出分析
# free -m total used free shared buffers cached Mem: 7871 1851 6020 0 110 1419 -/+ buffers/cache: 320 7551 Swap: 8191 0 8191free命令列含義:
total:物理內存的總大小
used:已經使用的物理內存大小
free:空閒的物理內存大小
shared:多個進程共享的內存大小
buffers/cached:磁盤緩存的大小
free命令行含義:
第二行Mem:代表物理內存使用情況
第三行(-/+ buffers/cached):代表磁盤緩存使用狀態
第四行:Swap表示交換空間內存使用狀態
free命令輸出的內存狀態,可以通過兩個角度來查看:一個是從內核的角度來看,一個是從應用層的角度來看的。
(1)、從內核角度來看系統內存的使用狀態:
是指內核目前可以直接分配到,不需要額外的操作,即free命令輸出中第二行Mem項的值,從上面的輸出可以看出:系統總計內存7871MB,已經使用了1851MB,剩余6020MB。即:7871-1851=6020
(2)、從應用層的角度來看系統內存的使用狀態
是指在系統上運行的應用程序可以使用的內存大小,即free命令輸出中第三行 -/+ buffers/cached的輸出,可以看到,系統已使用的內存才320MB,而空閒的內存達到7551MB。即:6020+110+1419=7549MB,對於應用程序來說,buffers/cached占有的內存是可用的,因為buffers/cached是為了提高文件讀取的性能,當應用程序需要用到內存的時候,buffers/cached會很快地被回收,以供應用程序使用。
四、Buffer和Cache的異同
buffers與cached都是內存操作,用來保存系統曾經打開過的文件以及文件屬性信息,這樣當操作系統需要讀取某些文件時,會首先在buffers與cached內存區查找,如果找到,直接讀出傳送給應用程序,如果沒有找到需要數據,才從磁盤讀取,這就是操作系統的緩存機制,通過緩存,大大提高了操作系統的性能。但buffers與cached緩沖的內容卻是不同的。
buffers是用來緩沖塊設備做的,它只記錄文件系統的元數據(metadata)以及 tracking in-flight pages,而cached是用來給文件做緩沖。更通俗一點說:buffers主要用來存放目錄裡面有什麼內容,文件的屬性以及權限等等。而cached直接用來記憶我們打開過的文件和程序。