linux内存free低cache高,Linux之free命令buff/cache过高
在Linux系統(tǒng)中,我們經(jīng)常用free命令來查看系統(tǒng)內(nèi)存的使用狀態(tài)。在一個RHEL6的系統(tǒng)上,free命令的顯示內(nèi)容大概是這樣一個狀態(tài):
free-g
其實:buffers/cache占用的較多,說明系統(tǒng)中有進程曾經(jīng)讀寫過文件,但是不要緊,這部分內(nèi)存是當空閑來用的
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ā)緩存清除的操作:
$sudo su 先切換到root用戶
#
$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、top等相關(guān)能夠查詢到當前內(nèi)存的使用情況的命令時,總會有一個buff/cache讓我們很困惑。
buffer
即寫如磁盤時,先保存到磁盤緩沖區(qū)(buffer),然后再寫入到磁盤。
cache
即讀磁盤時,數(shù)據(jù)從磁盤讀出后,暫留在緩沖區(qū)(cache),為后續(xù)程序的使用做準備。
如何劃分buffer/cache(已使用 or 空閑)
操作系統(tǒng)的角度:這塊內(nèi)存確實被操作系統(tǒng)使用了。
用戶角度:如果用戶要使用,這塊內(nèi)存是可以很快被回收而被用戶空間程序使用,因此從用戶角度而言這塊內(nèi)存應(yīng)被劃為空閑狀態(tài)。
Linux這種機制的好處
這是Linux一種非常優(yōu)秀的設(shè)計,目的就是為了提升磁盤IO的性能,從低速的塊設(shè)備上讀取的數(shù)據(jù)會暫時保存在內(nèi)存中,即使數(shù)據(jù)在當時已經(jīng)不再需要了,但在應(yīng)用程序下一次訪問該數(shù)據(jù)時,它可以從內(nèi)存中直接讀取,繞開了低速的塊設(shè)備,從而提高系統(tǒng)的整體性能。
總結(jié)
以上是生活随笔為你收集整理的linux内存free低cache高,Linux之free命令buff/cache过高的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux终端帮助,Linux下的帮助命
- 下一篇: linux局部变量特殊字符替换,变量,全