前言
free查看當前系統的內存及交換分區使用情況。(寫這篇文檔是因為一次面試中,面試官問道buff cache你了解嗎? 兩個月不碰系統突然有些懵。。。你了解什么叫buff/cache嗎?)
語法格式
free [options]
選項
-b:以Byte為單位顯示內存使用情況 -k:以KB為單位顯示內存使用情況 -m:以MB為單位顯示內存使用情況 -g:以GB為單位顯示內存使用情況 -h:以合適的單位顯示內存使用情況,最大為三位數,自動計算對應的單位值。單位有: B = bytes K = kilos M = megas G = gigas T = teras -o:不顯示緩沖區調節列 -s<間隔秒數>:持續觀察內存使用狀況 -t:顯示內存總和列 -V:顯示版本信息
實例
查看當前系統內存使用狀況
sh-4.2# free -m total used free shared buff/cache available Mem: 32105 8401 21728 9 1975 23296 Swap: 65535 0 65535 # Mem(第二行):物理內存描述信息 # Swap(第三行):交換內存描述信息 # total(第二列):系統總的可用物理內存大小 # used(第三列):已被使用的物理內存大小 # free(第四列):還有多少物理內存可用 # shared(第五列):多個進程共享的內存總額;如oracle的共享內存 # buff/cache(第六列):這里是兩個內容的描述;buff表示I/O緩存、cache表示高速緩存。 # available(第七列):還可以被應用程序使用的物理內存大小
PS:free 與 available 的區別
free是真正尚未被使用的物理內存數量。available是應用程序認為可用內存數量,available = free + buffer + cache(注:只是大概的計算方法)
Linux 為了提升讀寫性能,會消耗一部分內存資源緩存磁盤數據,對於內核來說,buffer 和 cache 其實都屬於已經被使用的內存。但當應用程序申請內存時,如果 free 內存不夠,內核就會回收 buffer 和 cache 的內存來滿足應用程序的請求。這就是稍后要說明的 buffer 和 cache。
PS:buffer和cache
- buff(Buffer Cache)是一種I/O緩存,用於內存和硬盤的緩沖,是io設備的讀寫緩沖區。根據磁盤的讀寫設計的,把分散的寫操作集中進行,減少磁盤碎片和硬盤的反復尋道,從而提高系統性能。
- cache(Page Cache)是一種高速緩存,用於CPU和內存之間的緩沖 ,是文件系統的cache。把讀取過的數據保存起來,重新讀取時若命中(找到需要的數據)就不要去讀硬盤了,若沒有命中就讀硬盤。其中的數據會根據讀取頻率進行組織,把最頻繁讀取的內容放在最容易找到的位置,把不再讀的內容不斷往后排,直至從中刪除。
動態查看內存使用情況
sh-4.2# free -m -s 1 total used free shared buff/cache available Mem: 32105 8402 21726 9 1975 23294 Swap: 65535 0 65535 total used free shared buff/cache available Mem: 32105 8402 21726 9 1975 23294 Swap: 65535 0 65535 total used free shared buff/cache available Mem: 32105 8402 21726 9 1975 23294 Swap: 65535 0 65535 total used free shared buff/cache available Mem: 32105 8402 21726 9 1975 23294 Swap: 65535 0 65535 total used free shared buff/cache available Mem: 32105 8402 21726 9 1975 23294 Swap: 65535 0 65535 total used free shared buff/cache available Mem: 32105 8402 21726 9 1975 23294 Swap: 65535 0 65535 total used free shared buff/cache available Mem: 32105 8402 21726 9 1975 23294 Swap: 65535 0 65535 # 每隔1S就會動態查看/proc/meminfo里面的內容
釋放內存
echo 1 > /proc/sys/vm/drop_caches echo 2 > /proc/sys/vm/drop_caches echo 3 > /proc/sys/vm/drop_caches # 1表示清除page cache數據 # 2表示清除slab分配器中的對象(包括目錄項緩存和inode緩存) # 3表示清除pagecache和slab分配器中的緩存對象 # /proc/sys/vm/drop_caches的默認值是0.
# 清除數據以前記得sync,先同步緩存中的數據至硬盤,以免數據丟失。
參考文檔
https://www.cnblogs.com/M18-BlankBox/p/5326484.html
https://www.jianshu.com/p/2ffeb3a3aa90
https://focusss.github.io/2019/02/10/Linux%E4%B8%ADbuff-cache%E5%8D%A0%E7%94%A8%E8%BF%87%E9%AB%98%E8%A7%A3%E5%86%B3%E6%89%8B%E6%AE%B5/
