Shell常用命令之free


前言

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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM