新聞中心
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)站建設服務,團隊從業(yè)經(jīng)驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為寶應企業(yè)提供專業(yè)的網(wǎng)站設計制作、網(wǎng)站設計,寶應網(wǎng)站改版等技術服務。擁有十載豐富建站經(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,關于此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相關介紹
什么是buffer/cache?
buffer 和 cache 是兩個在計算機技術中被用濫的名詞,放在不通語境下會有不同的意義。在 Linux 的內(nèi)存管理中,這里的 buffer 指 Linux 內(nèi)存的: Buffer cache 。這里的 cache 指 Linux 內(nèi)存中的: Page cache 。翻譯成中文可以叫做緩沖區(qū)緩存和頁面緩存。在歷史上,它們一個( buffer )被用來當成對 io 設備寫的緩存,而另一個( cache )被用來當作對 io 設備的讀緩存,這里的 io 設備,主要指的是塊設備文件和文件系統(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ù)所使用的塊設備決定的,而頁長度在 X86 上無論是 32 位還是 64 位都是 4k 。
明白了這兩套緩存系統(tǒng)的區(qū)別,就可以理解它們究竟都可以用來做什么了。
什么是 page cache
Page cache 主要用來作為文件系統(tǒng)上的文件數(shù)據(jù)的緩存來用,尤其是針對當進程對文件有 read / write 操作的時候。如果你仔細想想的話,作為可以映射文件到內(nèi)存的系統(tǒng)調(diào)用: mmap 是不是很自然的也應該用到 page cache ?在當前的系統(tǒng)實現(xiàn)里, page cache 也被作為其它文件類型的緩存設備來用,所以事實上 page cache 也負責了大部分的塊設備文件的緩存工作。
詳解CentOS的free命令詳解CentOS的free命令
什么是 buffer cache
Buffer cache 則主要是設計用來在系統(tǒng)對塊設備進行讀寫的時候,對塊進行數(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 空間分給相關進程使用。所以一般情況下,我們認為 buffer/cache 空間可以被釋放,這個理解是正確的。
但是這種清緩存的工作也并不是沒有成本。理解 cache 是干什么的就可以明白清緩存必須保證 cache 中的數(shù)據(jù)跟對應文件中的數(shù)據(jù)一致,才能對 cache 進行釋放。所以伴隨著 cache 清除的行為的,一般都是系統(tǒng) IO 飆高。因為內(nèi)核要對比 cache 中的數(shù)據(jù)和對應硬盤文件上的數(shù)據(jù)是否一致,如果不一致需要寫回,之后才能回收。
在系統(tǒng)中除了內(nèi)存將被耗盡的時候可以清緩存以外,我們還可以使用下面這個文件來人工觸發(fā)緩存清除的操作:
[root@tencent64 ~]# cat /proc/sys/vm/drop_caches
1
方法是:
echo 1 > /proc/sys/vm/drop_caches
當然,這個文件可以設置的值分別為 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 分配器中的緩存對象。
網(wǎng)站欄目:詳解free命令
分享路徑:http://m.5511xx.com/article/dpscggj.html


咨詢
建站咨詢
