1、一般情況下大家查看系統內存使用情況都會用到free -m 命令來查看(如圖)
但是多數情況大家對如何得出准確的內存使用率有些迷惑,因為多數的linux系統在free命令后會發現free(剩余)的內存很少,而自己又沒有開過多的程序或服務。對於上述的情況,正確的解釋是:linux的內存管理機制與windows的有所不同。具體的機制我們無需知道,我們需要知道的是,linux的內存管理機制的思想包括(不敢說就是)內存利用率最大化。內核會把剩余的內存申請為cached,而cached不屬於free范疇。當系統運行時間較久,會發現cached很大,對於有頻繁文件讀寫操作的系統,這種現象會更加明顯。
直觀的看,此時free的內存會非常小,但並不代表可用的內存小,當一個程序需要申請較大的內存時,如果free的內存不夠,內核會把部分cached的內存回收,回收的內存再分配給應用程序。所以對於linux系統,可用於分配的內存不只是free的內存,還包括cached的內存(其實還包括buffers)。
對操作系統來說,Buffers和Cached是已經被使用的(上圖Mem:這一行)
1 MemFree=total-used
2 196=7873-7677
對應用程序來說(上圖)
1 MemFree=buffers+cached+free
2 6336=282+5857+196
由於不同的linux發行版,在系統制作過程中會修改部分源碼。一般的系統(如Debian)使用free命令和讀取meminfo文件兩種方式計算的內存使用率是相同的。但是對於部分系統,如SUSE(並不確定是每個版本的都是,這里指SUSE Enterprise Server 11),其在free命令回顯的結果中,cached部分的值並不等於meminfo文件中的cached所顯示的值,而是等於meminfo文件中cached部分和SReclaimable部分之和。
也就是說,debian之類的系統為:
可用內存=free的內存+cached的內存+buffers的內存 (上圖Mem:這一行)
而SUSE之類的系統則為:
可用內存=free的內存+cached的內存+buffers的內存+SReclaimable的內存