linux内存free低cache高,Linux之free命令buff/cache过高
在Linux系統中,我們經常用free命令來查看系統內存的使用狀態。在一個RHEL6的系統上,free命令的顯示內容大概是這樣一個狀態:
free-g
其實:buffers/cache占用的較多,說明系統中有進程曾經讀寫過文件,但是不要緊,這部分內存是當空閑來用的
Linux內核會在內存將要耗盡的時候,觸發內存回收的工作,以便釋放出內存給急需內存的進程使用。一般情況下,這個操作中主要的內存釋放都來自于對buffer/cache的釋放。尤其是被使用更多的cache空間。既然它主要用來做緩存,只是在內存夠用的時候加快進程對文件的讀寫速度,那么在內存壓力較大的情況下,當然有必要清空釋放cache,作為free空間分給相關進程使用。所以一般情況下,我們認為buffer/cache空間可以被釋放,這個理解是正確的。
但是這種清緩存的工作也并不是沒有成本。理解cache是干什么的就可以明白清緩存必須保證cache中的數據跟對應文件中的數據一致,才能對cache進行釋放。所以伴隨著cache清除的行為的,一般都是系統IO飆高。因為內核要對比cache中的數據和對應硬盤文件上的數據是否一致,如果不一致需要寫回,之后才能回收。
在系統中除了內存將被耗盡的時候可以清緩存以外,我們還可以使用下面這個文件來人工觸發緩存清除的操作:
$sudo su 先切換到root用戶
#
$echo 1 > /proc/sys/vm/drop_caches:表示清除pagecache。
$echo 2 > /proc/sys/vm/drop_caches:表示清除回收slab分配器中的對象(包括目錄項緩存和inode緩存)。slab分配器是內核中管理內存的一種機制,其中很多緩存數據實現都是用的pagecache。
$echo 3 > /proc/sys/vm/drop_caches:表示清除pagecache和slab分配器中的緩存對象。
我們用free、top等相關能夠查詢到當前內存的使用情況的命令時,總會有一個buff/cache讓我們很困惑。
buffer
即寫如磁盤時,先保存到磁盤緩沖區(buffer),然后再寫入到磁盤。
cache
即讀磁盤時,數據從磁盤讀出后,暫留在緩沖區(cache),為后續程序的使用做準備。
如何劃分buffer/cache(已使用 or 空閑)
操作系統的角度:這塊內存確實被操作系統使用了。
用戶角度:如果用戶要使用,這塊內存是可以很快被回收而被用戶空間程序使用,因此從用戶角度而言這塊內存應被劃為空閑狀態。
Linux這種機制的好處
這是Linux一種非常優秀的設計,目的就是為了提升磁盤IO的性能,從低速的塊設備上讀取的數據會暫時保存在內存中,即使數據在當時已經不再需要了,但在應用程序下一次訪問該數據時,它可以從內存中直接讀取,繞開了低速的塊設備,從而提高系統的整體性能。
總結
以上是生活随笔為你收集整理的linux内存free低cache高,Linux之free命令buff/cache过高的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux终端帮助,Linux下的帮助命
- 下一篇: linux局部变量特殊字符替换,变量,全