linux下free命令詳解
總結 : 使用 free命令檢視linux記憶體時,第三行的 buffers/cache才是當前系統中的可用記憶體;
另外關於buffer/cache的區別,這篇文章裡也有詳細解釋http://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.html
解釋一下Linux上free命令的輸出。
下面是free的執行結果,一共有4行。為了方便說明,我們加上了列號。這樣可以把free的輸出看成一個二維陣列FO(Free Output)。例如:
• FO[2][1] = 999212
• FO[3][2] = 305404
1 2 3 4 5 6
1 total used free shared buffers cached
2 Mem: 999212 967476 31736 0 50668 223000
3 -/+ buffers/cache: 693808 305404
4 Swap: 2048276 154524 1893752
複製程式碼
free的輸出一共有四行,第四行為交換區的資訊,分別是交換的總量(total),使用量(used)和有多少空閒的交換區(free),這個比較清楚,不說太多。
free輸出地第二行和第三行是比較讓人迷惑的。這兩行都是說明記憶體使用情況的。第一列是總量(free),第二列是使用量(free),第三列是可用量(free)。第一行的輸出時從作業系統(OS)來看的。也就是說,從OS的角度來看,計算機上一共有:
• 999212KB(預設時free的單位為KB)實體記憶體,即FO[2][1];
• 在這些實體記憶體中有967476KB(即FO[2][2])被使用了;
• 還用31736KB(即FO[2][3])是可用的;
這裡得到第一個等式:
• FO[2][1] = FO[2][2] + FO[2][3]
FO[2][4]表示被幾個程式共享的記憶體的,現在已經deprecated,其值總是0(當然在一些系統上也可能不是0,主要取決於free命令是怎麼實現的)。
FO[2][5]表示被OS buffer住的記憶體。FO[2][6]表示被OS cache的記憶體。在有些時候buffer和cache這兩個詞經常混用。不過在一些比較低層的軟體裡是要區分這兩個詞的,看老外的洋文:
• A buffer is something that has yet to be "written" to disk.
• A cache is something that has been "read" from the disk and stored for later use.
也就是說buffer是用於存放要輸出到disk(塊裝置)的資料的,而cache是存放從disk上讀出的資料。這二者是為了提高IO效能的,並由OS管理。
Linux和其他成熟的作業系統(例如windows),為了提高IO read的效能,總是要多cache一些資料,這也就是為什麼FO[2][6](cached memory)比較大,而FO[2][3]比較小的原因。我們可以做一個簡單的測試:
1. 釋放掉被系統cache佔用的資料;
echo 3 >/proc/sys/vm/drop_caches
2. 讀一個大檔案,並記錄時間;
3. 關閉該檔案;
4. 重讀這個大檔案,並記錄時間;
第二次讀應該比第一次快很多。原來我做過一個BerkeleyDB的讀操作,大概要讀5G的檔案,幾千萬條記錄。在我的環境上,第二次讀比第一次大概可以快9倍左右。
free輸出的第二行是從一個應用程式的角度看系統記憶體的使用情況。
• 對於FO[3][2],即-buffers/cache,表示一個應用程式認為系統被用掉多少記憶體;
• 對於FO[3][3],即+buffers/cache,表示一個應用程式認為系統還有多少記憶體;
因為被系統cache和buffer佔用的記憶體可以被快速回收,所以通常FO[3][3]比FO[2][3]會大很多。
這裡還用兩個等式:
• FO[3][2] = FO[2][2] - FO[2][5] - FO[2][6]
• FO[3][3] = FO[2][3] + FO[2][5] + FO[2][6]
這二者都不難理解。
free命令由procps.*.rpm提供(在Redhat系列的OS上)。free命令的所有輸出值都是從/proc/meminfo中讀出的。
在系統上可能有meminfo(2)這個函式,它就是為了解析/proc/meminfo的。procps這個包自己實現了meminfo()這個函式。可以下載一個procps的tar包看看具體實現,現在最新版式3.2.8。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-718639/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 詳解CentOS的free命令CentOS
- Linux下 ln 命令詳解Linux
- Linux at命令詳解Linux
- Linux下解壓命令、壓縮命令大全,詳細教程Linux
- Linux效能調優命令之freeLinux
- Linux下的tar壓縮解壓縮命令詳解Linux
- linux top 命令詳解Linux
- linux命令詳解:sortLinux
- linux top命令詳解Linux
- Linux screen 命令詳解Linux
- Linux find 命令詳解Linux
- Linux xargs 命令詳解Linux
- Linux sed 命令詳解Linux
- Linux awk 命令詳解Linux
- Linux iptables 命令詳解Linux
- Linux xattr 命令詳解Linux
- Linux locate 命令詳解Linux
- Linux netstat 命令詳解Linux
- Linux firewalld 命令詳解Linux
- Linux ss 命令詳解Linux
- Linux nc 命令詳解Linux
- Linux history 命令詳解Linux
- Linux sort 命令詳解Linux
- Linux diff命令詳解Linux
- 詳解Linux chkconfig命令Linux
- Linux chattr命令詳解Linux
- Linux命令top詳解Linux
- Linux umask 命令詳解Linux
- Linux下 netstat ps kill 命令詳解及常用命令收集Linux
- Linux系統管理之free、w、who、last、lastlog命令講解LinuxAST
- Linux的scp命令詳解Linux
- Linux中awk命令詳解Linux
- linux之kill命令詳解Linux
- linux的zip命令詳解Linux
- Linux中DD命令詳解Linux
- 【Linux】命令expect使用詳解Linux
- Linux基礎命令詳解Linux
- Linux下使用timedatectl命令時間時區操作詳解Linux
- free命令