linux的free命令
linux的free命令
free命令在linux系統(tǒng)中主要是顯示系統(tǒng)使用和空閑的內(nèi)存情況。下面由學(xué)習(xí)啦小編為大家整理了linux的free命令的相關(guān)知識(shí),希望大家喜歡!
Linux的free命令詳解
語(yǔ)法
free(選項(xiàng))
1.命令格式:
free [參數(shù)]
2.命令功能:
free 命令顯示系統(tǒng)使用和空閑的內(nèi)存情況,包括物理內(nèi)存、交互區(qū)內(nèi)存(swap)和內(nèi)核緩沖區(qū)內(nèi)存。共享內(nèi)存將被忽略
3.命令參數(shù):
-b 以Byte為單位顯示內(nèi)存使用情況。
-k 以KB為單位顯示內(nèi)存使用情況。
-m 以MB為單位顯示內(nèi)存使用情況。
-g 以GB為單位顯示內(nèi)存使用情況。
-o 不顯示緩沖區(qū)調(diào)節(jié)列。
-s<間隔秒數(shù)> 持續(xù)觀察內(nèi)存使用狀況。
-t 顯示內(nèi)存總和列。
-V 顯示版本信息。
上面是free的運(yùn)行結(jié)果,一共有4行。為了方便說(shuō)明,我加上了列號(hào)。這樣可以把free的輸出看成一個(gè)二維數(shù)組FO(Free Output)。例如:
FO[2][1] = 790920 FO[3][2] = 55000
free的輸出一共有四行,第四行為交換區(qū)的信息,分別是交換的總量(total),使用量(used)和有多少空閑的交換區(qū)(free),這個(gè)比較清楚,不說(shuō)太多。
free輸出地第二行和第三行是比較讓人迷惑的。這兩行都是說(shuō)明內(nèi)存使用情況的。第一列是總量(total),第二列是使用量(used),第三列是可用量(free)。
第一行的輸出是從操作系統(tǒng)(OS)來(lái)看的。也就是說(shuō),從OS的角度來(lái)看,計(jì)算機(jī)上一共有:
- 790920KB(缺省時(shí)free的單位為KB)物理內(nèi)存,即FO[2][1];
- 在這些物理內(nèi)存中有93200KB(即FO[2][2])被使用了;
- 還用697720KB(即Mem/free)是可用的;
Men:tootal=used+free
Mem/shared:表示被幾個(gè)進(jìn)程共享的內(nèi)存的,現(xiàn)在已經(jīng)deprecated,其值總是0(當(dāng)然在一些系統(tǒng)上也可能不是0,主要取決于free命令是怎么實(shí)現(xiàn)的)。
Mem/buffers:表示被OS buffer住的內(nèi)存。Mem/cached表示被OS cache的內(nèi)存。在有些時(shí)候buffer和cache這兩個(gè)詞經(jīng)常混用。不過在一些比較低層的軟件里是要區(qū)分這兩個(gè)詞的,看老外的洋文:
A buffer is something that has yet to be "written" to disk. (緩沖區(qū)是一個(gè)尚未被“寫入”到磁盤的東西。)
A cache is something that has been "read" from the disk and stored for later use.(緩存是從磁盤上被“讀”的東西,并存儲(chǔ)為以后使用。)
也就是說(shuō)buffer是用于存放要輸出到disk(塊設(shè)備)的數(shù)據(jù)的,而cache是存放從disk上讀出的數(shù)據(jù)。這二者是為了提高IO性能的,并由OS管理。
Linux和其他成熟的操作系統(tǒng)(例如windows),為了提高IO read的性能,總是要多cache一些數(shù)據(jù),這也就是為什么FO[2][6](cached memory)比較大,而FO[2][3]比較小的原因。我們可以做一個(gè)簡(jiǎn)單的測(cè)試:
1.釋放掉被系統(tǒng)cache占用的數(shù)據(jù);
echo 3>/proc/sys/vm/drop_caches
2.讀一個(gè)大文件,并記錄時(shí)間;
3.關(guān)閉該文件;
4.重讀這個(gè)大文件,并記錄時(shí)間;
第二次讀應(yīng)該比第一次快很多。原來(lái)我做過一個(gè)BerkeleyDB的讀操作,大概要讀5G的文件,幾千萬(wàn)條記錄。在我的環(huán)境上,第二次讀比第一次大概可以快9倍左右。
free輸出的第二行是從一個(gè)應(yīng)用程序的角度看系統(tǒng)內(nèi)存的使用情況。
對(duì)于FO[3][2],即-buffers/cache,表示一個(gè)應(yīng)用程序認(rèn)為系統(tǒng)被用掉多少內(nèi)存;
對(duì)于FO[3][3],即+buffers/cache,表示一個(gè)應(yīng)用程序認(rèn)為系統(tǒng)還有多少內(nèi)存;
因?yàn)楸幌到y(tǒng)cache和buffer占用的內(nèi)存可以被快速回收,所以通常FO[3][3]比FO[2][3]會(huì)大很多。
這里還用兩個(gè)等式:
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中讀出的。
在系統(tǒng)上可能有meminfo(2)這個(gè)函數(shù),它就是為了解析/proc/meminfo的。procps這個(gè)包自己實(shí)現(xiàn)了meminfo()這個(gè)函數(shù)??梢韵螺d一個(gè)procps的tar包看看具體實(shí)現(xiàn),現(xiàn)在最新版式3.2.8。
linux的free命令實(shí)例
1.顯示內(nèi)存使用情況
# free //顯示內(nèi)存使用信息
total used free shared buffers cached
Mem: 254772 184568 70204 0 5692 89892
-/+ buffers/cache: 88984 165788
Swap: 524280 65116 459164
2.以總和的形式顯示內(nèi)存的使用信息
# free -t //以總和的形式查詢內(nèi)存的使用信息
total used free shared buffers cached
Mem: 254772 184868 69904 0 5936 89908
-/+ buffers/cache: 89024 165748
Swap: 524280 65116 459164
Total: 779052 249984 529068
3.周期性的查詢內(nèi)存使用信息
# free -s 10 //每10s 執(zhí)行一次命令
total used free shared buffers cached
Mem: 254772 187628 67144 0 6140 89964
-/+ buffers/cache: 91524 163248
Swap: 524280 65116 459164
total used free shared buffers cached
Mem: 254772 187748 67024 0 6164 89940
-/+ buffers/cache: 91644 163128
Swap: 524280 65116 459164