Linux之free命令

      網友投稿 1015 2025-03-31

      FREE命令可以顯示linux系統中空閑的、已用的物理內存及swap內存,及被內核使用的buffer。在linux系統監控的工具中,FREE命令是最經常使用的命令之一。

      命令格式

      free [參數]

      命令功能

      free命令顯示系統使用和空閑的內存情況,包括物理內存、交互區內存(swap)和內核緩沖區內存。共享內存將被忽略.

      命令參數

      -b  以Byte為單位顯示內存使用情況。

      -k  以KB為單位顯示內存使用情況。

      -m  以MB為單位顯示內存使用情況。

      -g 以GB為單位顯示內存使用情況。

      -o  不顯示緩沖區調節列。

      -s<間隔秒數>  持續觀察內存使用狀況。

      -t  顯示內存總和列。

      -V  顯示版本信息。

      顯示內存使用情況

      輸出簡介

      Mem 行(第二行)是內存的使用情況。

      Swap 行(第三行)是交換空間的使用情況。

      total 列顯示系統總的可用物理內存和交換空間大小。

      used 列顯示已經被使用的物理內存和交換空間。

      free 列顯示還有多少物理內存和交換空間可用使用。

      shared 列顯示被共享使用的物理內存大小。

      buff/cache 列顯示被 buffer 和 cache 使用的物理內存大小。

      available 列顯示還可以被應用程序使用的物理內存大小。

      buffers和cached都是緩存,兩者有什么區別

      先來提一個問題: buffer 和 cache 應該是兩種類型的內存,但是 free 命令為什么會把它們放在一起呢?要回答這個問題需要我們做些準備工作。讓我們先來搞清楚 buffer 與 cache 的含義。

      為了提高磁盤存取效率, Linux做了一些精心的設計, 除了對dentry進行緩存(用于VFS,加速文件路徑名到inode的轉換), 還采取了兩種主要Cache方式:Buffer Cache和Page Cache。前者針對磁盤塊的讀寫,后者針對文件inode的讀寫。這些Cache有效縮短了 I/O系統調用(比如read,write,getdents)的時間。

      buffer 在操作系統中指 buffer cache, 中文一般翻譯為 “緩沖區”。要理解緩沖區,必須明確另外兩個概念:“扇區” 和 “塊”。扇區是設備的最小尋址單元,也叫 “硬扇區” 或 “設備塊”。塊是操作系統中文件系統的最小尋址單元,也叫 “文件塊” 或 “I/O 塊”。每個塊包含一個或多個扇區,但大小不能超過一個頁面,所以一個頁可以容納一個或多個內存中的塊。當一個塊被調入內存時,它要存儲在一個緩沖區中。每個緩沖區與一個塊對應,它相當于是磁盤塊在內存中的表示:

      注意,buffer cache 只有塊的概念而沒有文件的概念,它只是把磁盤上的塊直接搬到內存中而不關心塊中究竟存放的是什么格式的文件。

      cache 在操作系統中指 page cache,中文一般翻譯為 “頁高速緩存”。頁高速緩存是內核實現的磁盤緩存。它主要用來減少對磁盤的 I/O 操作。具體地講,是通過把磁盤中的數據緩存到物理內存中,把對磁盤的訪問變為對物理內存的訪問。頁高速緩存緩存的是內存頁面。緩存中的頁來自對普通文件、塊設備文件(這個指的就是 buffer cache 呀)和內存映射文件的讀寫。

      頁高速緩存對普通文件的緩存我們可以這樣理解:當內核要讀一個文件(比如 /etc/hosts)時,它會先檢查這個文件的數據是不是已經在頁高速緩存中了。如果在,就放棄訪問磁盤,直接從內存中讀取。這個行為稱為緩存命中。如果數據不在緩存中,就是未命中緩存,此時內核就要調度塊 I/O 操作從磁盤去讀取數據。然后內核將讀來的數據放入頁高速緩存中。這種緩存的目標是文件系統可以識別的文件(比如 /etc/hosts)。

      頁高速緩存對塊設備文件的緩存就是我們在前面介紹的 buffer cahce。因為獨立的磁盤塊通過緩沖區也被存入了頁高速緩存(緩沖區最終是由頁高速緩存來承載的)。緩沖區只不過是一種概念上比較特殊的頁高速緩存罷了

      Linux之free命令

      那么為什么 free 命令不直接稱為 cache 而非要寫成 buff/cache? 這是因為緩沖區和頁高速緩存的實現并非天生就是統一的。在 linux 內核 2.4 中才將它們統一。更早的內核中有兩個獨立的磁盤緩存:頁高速緩存和緩沖區高速緩存。前者緩存頁面,后者緩存緩沖區。當你知道了這些故事之后,輸出中列的名稱可能已經不再重要了。

      free 與 available

      在 free 命令的輸出中,有一個 free 列,同時還有一個 available 列。這二者到底有何區別?

      free 是真正尚未被使用的物理內存數量。至于 available 就比較有意思了,它是從應用程序的角度看到的可用內存數量。Linux 內核為了提升磁盤操作的性能,會消耗一部分內存去緩存磁盤數據,就是我們介紹的 buffer 和 cache。所以對于內核來說,buffer 和 cache 都屬于已經被使用的內存。當應用程序需要內存時,如果沒有足夠的 free 內存可以用,內核就會從 buffer 和 cache 中回收內存來滿足應用程序的請求。所以從應用程序的角度來說,available = free + buffer + cache。請注意,這只是一個很理想的計算方式,實際中的數據往往有較大的誤差。

      交換空間(swap space)

      swap space 是磁盤上的一塊區域,可以是一個分區,也可以是一個文件。所以具體的實現可以是 swap 分區也可以是 swap 文件。當系統物理內存吃緊時,Linux 會將內存中不常訪問的數據保存到 swap 上,這樣系統就有更多的物理內存為各個進程服務,而當系統需要訪問 swap 上存儲的內容時,再將 swap 上的數據加載到內存中,這就是常說的換出和換入。交換空間可以在一定程度上緩解內存不足的情況,但是它需要讀寫磁盤數據,所以性能不是很高。

      現在的機器一般都不太缺內存,如果系統默認還是使用了 swap 是不是會拖累系統的性能?理論上是的,但實際上可能性并不是很大。并且內核提供了一個叫做 swappiness 的參數,用于配置需要將內存中不常用的數據移到 swap 中去的緊迫程度。這個參數的取值范圍是 0~100,0 告訴內核盡可能的不要將內存數據移到 swap 中,也即只有在迫不得已的情況下才這么做,而 100 告訴內核只要有可能,盡量的將內存中不常訪問的數據移到 swap 中。在 ubuntu 系統中,swappiness 的默認值是 60。如果我們覺著內存充足,可以在 /etc/sysctl.conf 文件中設置 swappiness:

      > vm.swappiness=10

      以總和的形式顯示內存的使用信息

      周期性的查詢內存使用信息

      Linux

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:excel2003統計人數的方法
      下一篇:HBase 架構:HBase 數據模型 & HBase 讀/寫機制
      相關文章
      亚洲无人区午夜福利码高清完整版| 亚洲午夜无码毛片av久久京东热| 亚洲人成人网毛片在线播放| 亚洲男人第一av网站| AV激情亚洲男人的天堂国语| 亚洲第一第二第三第四第五第六| 亚洲不卡在线观看| 亚洲成av人片不卡无码| 亚洲色偷偷av男人的天堂 | 老汉色老汉首页a亚洲| 国产亚洲综合一区柠檬导航| 国产亚洲视频在线播放| 中文字幕亚洲乱码熟女一区二区 | 国产精品亚洲专区在线播放| 国产成人高清亚洲一区久久| 午夜亚洲av永久无码精品| 亚洲国产精品自产在线播放| 亚洲日韩在线中文字幕第一页| 亚洲男人天堂2020| 亚洲综合伊人久久大杳蕉| 亚洲一区二区三区偷拍女厕 | 亚洲精品国产国语| 亚洲中文无码mv| 亚洲乱码日产精品一二三| 亚洲av片在线观看| 亚洲v国产v天堂a无码久久| 国产av无码专区亚洲国产精品| 国产亚洲色视频在线| 国产精一品亚洲二区在线播放| 亚洲av永久无码精品网站| 精品亚洲成a人片在线观看| 亚洲日韩中文字幕天堂不卡 | 中文字幕亚洲图片| 亚洲处破女AV日韩精品| 99久久亚洲综合精品成人网| 亚洲国产精品成人精品小说| 亚洲人成未满十八禁网站| gogo全球高清大胆亚洲| 亚洲色中文字幕无码AV| 亚洲影院在线观看| 亚洲一卡2卡3卡4卡乱码 在线 |