新聞中心
Linux free命令用于顯示內(nèi)存狀態(tài)。free指令會顯示內(nèi)存的使用情況,包括實體內(nèi)存,虛擬的交換文件內(nèi)存,共享內(nèi)存區(qū)段,以及系統(tǒng)核心使用的緩沖區(qū)等,下面為大家詳細講解一下free命令。

創(chuàng)新互聯(lián)長期為數(shù)千家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為寶應(yīng)企業(yè)提供專業(yè)的網(wǎng)站設(shè)計制作、網(wǎng)站設(shè)計,寶應(yīng)網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
1.在CentOS6及以前的版本中
在CentOS6及以前的版本中,free命令輸出是這樣的:
$free -m
total used free shared buffers cached
Mem: 1002 769 233 0 62 421
-/+ buffers/cache: 286 716
Swap: 1153 0 1153
第一行
系統(tǒng)內(nèi)存主要分為四部分:used(程序已使用內(nèi)存),free(空閑內(nèi)存),buffers(buffer cache),cached(Page cache)。
系統(tǒng)總內(nèi)存total = used + free; buffers和cached被算在used里,因此第一行系統(tǒng)已使用內(nèi)存used = buffers + cached + 第二行系統(tǒng)已使用內(nèi)存used由于buffers和cached在系統(tǒng)需要時可以被回收使用,因此系統(tǒng)可用內(nèi)存 = free + buffers + cached;
shared為程序共享的內(nèi)存空間,往往為0。
第二行
正因為buffers和cached在系統(tǒng)需要時可以被回收使用,因此buffer和cached其實可以可以算作可用內(nèi)存,因此:
系統(tǒng)可用內(nèi)存,即第二行的free = 第一行的free + buffers + cached。
系統(tǒng)已使用內(nèi)存,即第二行的used = total – 第二行free
第三行
swap內(nèi)存交換空間使用情況
2. CentOS7及以后
CentOS7及以后free命令的輸出如下:
# free -m
total used free shared buff/cache available
Mem: 3440 213 2276 168 950 2778
Swap: 0 0 0
buffer和cached被合成一組,加入了一個available,關(guān)于此available,文檔上的說明如下: ?MemAvailable: An estimate of how much memory is available for starting new applications, without swapping.
即系統(tǒng)可用內(nèi)存,之前說過由于buffer和cache可以在需要時被釋放回收,系統(tǒng)可用內(nèi)存即 free + buffer + cache,在CentOS7之后這種說法并不準確,因為并不是所有的buffer/cache空間都可以被回收。
即available = free + buffer/cache – 不可被回收內(nèi)存(共享內(nèi)存段、tmpfs、ramfs等)。
因此在CentOS7之后,用戶不需要去計算buffer/cache,即可以看到還有多少內(nèi)存可用,更加簡單直觀。
3. buffer/cache相關(guān)介紹
什么是buffer/cache?
buffer 和 cache 是兩個在計算機技術(shù)中被用濫的名詞,放在不通語境下會有不同的意義。在 Linux 的內(nèi)存管理中,這里的 buffer 指 Linux 內(nèi)存的: Buffer cache 。這里的 cache 指 Linux 內(nèi)存中的: Page cache 。翻譯成中文可以叫做緩沖區(qū)緩存和頁面緩存。在歷史上,它們一個( buffer )被用來當成對 io 設(shè)備寫的緩存,而另一個( cache )被用來當作對 io 設(shè)備的讀緩存,這里的 io 設(shè)備,主要指的是塊設(shè)備文件和文件系統(tǒng)上的普通文件。但是現(xiàn)在,它們的意義已經(jīng)不一樣了。在當前的內(nèi)核中, page cache 顧名思義就是針對內(nèi)存頁的緩存,說白了就是,如果有內(nèi)存是以 page 進行分配管理的,都可以使用 page cache 作為其緩存來管理使用。當然,不是所有的內(nèi)存都是以頁( page )進行管理的,也有很多是針對塊( block )進行管理的,這部分內(nèi)存使用如果要用到 cache 功能,則都集中到 buffer cache 中來使用。(從這個角度出發(fā),是不是 buffer cache 改名叫做 block cache 更好?)然而,也不是所有塊( block )都有固定長度,系統(tǒng)上塊的長度主要是根據(jù)所使用的塊設(shè)備決定的,而頁長度在 X86 上無論是 32 位還是 64 位都是 4k 。
明白了這兩套緩存系統(tǒng)的區(qū)別,就可以理解它們究竟都可以用來做什么了。
什么是 page cache
Page cache 主要用來作為文件系統(tǒng)上的文件數(shù)據(jù)的緩存來用,尤其是針對當進程對文件有 read / write 操作的時候。如果你仔細想想的話,作為可以映射文件到內(nèi)存的系統(tǒng)調(diào)用: mmap 是不是很自然的也應(yīng)該用到 page cache ?在當前的系統(tǒng)實現(xiàn)里, page cache 也被作為其它文件類型的緩存設(shè)備來用,所以事實上 page cache 也負責了大部分的塊設(shè)備文件的緩存工作。
詳解CentOS的free命令詳解CentOS的free命令
什么是 buffer cache
Buffer cache 則主要是設(shè)計用來在系統(tǒng)對塊設(shè)備進行讀寫的時候,對塊進行數(shù)據(jù)緩存的系統(tǒng)來使用。這意味著某些對塊的操作會使用 buffer cache 進行緩存,比如我們在格式化文件系統(tǒng)的時候。一般情況下兩個緩存系統(tǒng)是一起配合使用的,比如當我們對一個文件進行寫操作的時候, page cache 的內(nèi)容會被改變,而 buffer cache 則可以用來將 page 標記為不同的緩沖區(qū),并記錄是哪一個緩沖區(qū)被修改了。這樣,內(nèi)核在后續(xù)執(zhí)行臟數(shù)據(jù)的回寫( writeback )時,就不用將整個 page 寫回,而只需要寫回修改的部分即可。
如何回收 cache ?
Linux 內(nèi)核會在內(nèi)存將要耗盡的時候,觸發(fā)內(nèi)存回收的工作,以便釋放出內(nèi)存給急需內(nèi)存的進程使用。一般情況下,這個操作中主要的內(nèi)存釋放都來自于對 buffer / cache 的釋放。尤其是被使用更多的 cache 空間。既然它主要用來做緩存,只是在內(nèi)存夠用的時候加快進程對文件的讀寫速度,那么在內(nèi)存壓力較大的情況下,當然有必要清空釋放 cache ,作為 free 空間分給相關(guān)進程使用。所以一般情況下,我們認為 buffer/cache 空間可以被釋放,這個理解是正確的。
但是這種清緩存的工作也并不是沒有成本。理解 cache 是干什么的就可以明白清緩存必須保證 cache 中的數(shù)據(jù)跟對應(yīng)文件中的數(shù)據(jù)一致,才能對 cache 進行釋放。所以伴隨著 cache 清除的行為的,一般都是系統(tǒng) IO 飆高。因為內(nèi)核要對比 cache 中的數(shù)據(jù)和對應(yīng)硬盤文件上的數(shù)據(jù)是否一致,如果不一致需要寫回,之后才能回收。
在系統(tǒng)中除了內(nèi)存將被耗盡的時候可以清緩存以外,我們還可以使用下面這個文件來人工觸發(fā)緩存清除的操作:
[root@tencent64 ~]# cat /proc/sys/vm/drop_caches
1
方法是:
echo 1 > /proc/sys/vm/drop_caches
當然,這個文件可以設(shè)置的值分別為 1 、 2 、 3 。它們所表示的含義為:
echo 1 > /proc/sys/vm/drop_caches:
表示清除 pagecache 。
echo 2 > /proc/sys/vm/drop_caches:
表示清除回收 slab 分配器中的對象(包括目錄項緩存和 inode 緩存)。 slab 分配器是內(nèi)核中管理內(nèi)存的一種機制,其中很多緩存數(shù)據(jù)實現(xiàn)都是用的 pagecache 。
echo 3 > /proc/sys/vm/drop_caches:
表示清除 pagecache 和 slab 分配器中的緩存對象。
本文名稱:詳解free命令
標題路徑:http://www.dlmjj.cn/article/dpscggj.html


咨詢
建站咨詢
