目錄
Linux free指令:查看記憶體使用狀態
輸出簡介" >輸出簡介
buff/cache" >buff/cache
free 与 available" >free 与 available
交换空间(swap space)" >交换空间(swap space)
/proc/meminfo 文件" >/proc/meminfo 文件
总结" >总结
首頁 常見問題 linux中free是什麼

linux中free是什麼

Mar 02, 2023 am 09:59 AM
linux

在linux中,free是查看記憶體使用狀態的內建指令,可以顯示包含系統實體記憶體、虛擬記憶體(swap交換分割區)、共享記憶體和系統快取的使用情況,文法「free [選項] 」;free指令的輸出和top指令的記憶體部分非常相似。

linux中free是什麼

本教學操作環境:linux7.3系統、Dell G3電腦。

Linux free指令:查看記憶體使用狀態

free 指令用來顯示系統記憶體狀態,包括系統實體記憶體、虛擬記憶體(swap 交換分割區)、共享記憶體和系統快取的使用情況,其輸出和top 指令的記憶體部分非常相似。

free 指令的基本格式如下:

# free [选项]
登入後複製

表 1 羅列出了此指令常用的選項及各自的意義。

##- b以Byte(位元組)為單位,顯示記憶體使用量。 -k以 KB 為單位,顯示記憶體使用情況,此選項是 free 指令的預設選項。 -m以 MB 為單位,顯示記憶體使用量。 -g以 GB 為單位,顯示記憶體使用量。 -t在輸出的最終結果中,輸出記憶體和 swap 分割區的總量。 -o不顯示系統緩衝區這一列。 -s 間隔秒數依指定的間隔時間,持續顯示記憶體使用量。

free 命令可以显示系统中剩余及已用的物理内存和交换内存,以及共享内存和被核心使用的缓冲区。

如果加上 -h 选项,输出的结果会友好很多:

有时我们需要持续的观察内存的状况,此时可以使用 -s 选项并指定间隔的秒数:

$ free -h -s 3
登入後複製

上面的指令每隔 3 秒輸出一次記憶體的使用情況,直到你按下 ctrl c。

由於 free 指令本身比較簡單,所以本文的重點會放在如何透過 free 指令來了解系統目前的記憶體使用狀況。

輸出簡介

#以下先解釋一下輸出的內容:

  • ##Mem 行(第二行)是記憶體的使用情況。

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

  • #total

    欄位顯示系統總可用的實體記憶體與交換空間大小。

  • #used
  • 欄位顯示已經被使用的實體記憶體和交換空間。

    #free
  • 欄位顯示還有多少實體記憶體和交換空間可用。
  • shared

    欄位顯示被共享使用的實體記憶體大小。

  • buff/cache 欄位顯示被buffer 和cache 使用的實體記憶體大小。

available### 欄位顯示還可以被應用程式使用的實體記憶體大小。 ###########################################我想只有在理解了一些基本概念之後,上面的輸出才能幫助我們了解系統的記憶體狀況。 ######

buff/cache

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

buffer# 在作業系統中指 buffer cache, 中文一般翻譯為 "緩衝區"。要理解緩衝區,必須先明確另外兩個概念:"扇區" 和 "塊"。扇區是設備的最小尋址單元,也叫 "硬扇區" 或 "設備塊"。區塊是作業系統中檔案系統的最小尋址單元,也叫 "檔案區塊" 或 "I/O 區塊"。每個區塊包含一個或多個磁區,但大小不能超過一個頁面,所以一個頁可以容納一個或多個記憶體中的區塊。當一個區塊被調入記憶體時,它要儲存在一個緩衝區中。每個緩衝區與一個區塊對應,它相當於是磁碟區塊在記憶體中的表示(下圖來自互聯網):

注意,buffer cache 只有區塊的概念而沒有檔案的概念,它只是把磁碟上的區塊直接移到記憶體中而不關心區塊中究竟存放的是什麼格式的檔案。

cache 在作業系統中指page cache,中文一般翻譯為"頁高速緩存"。頁高速緩存是核心實現的磁碟快取。它主要用來減少對磁碟的I/O 操作。具體地說,是透過把磁碟中的資料快取到實體記憶體中,把對磁碟的存取變成對實體記憶體的存取。頁快取快取的是記憶體頁面。快取中的頁來自對普通文件、區塊設備文件(這個指的是buffer cache 呀)和內存映射文件的讀寫
頁高速緩存對普通文件的緩存我們可以這樣理解:當內核要讀一個文件(比如 /etc/hosts)時,它會先檢查這個檔案的資料是不是已經在頁高速緩存中了。如果在,就放棄存取磁碟,直接從記憶體中讀取。這個行為稱為快取命中。如果資料不在快取中,就是未命中緩存,此時核心就要調度塊 I/O 操作從磁碟去讀取資料。然後核心將讀來的資料放入頁高速緩存中。這種快取的目標是檔案系統可以辨識的檔案(例如 /etc/hosts)。
頁高速緩存對區塊裝置檔案的快取就是我們在前面介紹的 buffer cahce。因為獨立的磁碟區塊透過緩衝區也被存入了頁高速緩存(緩衝區最終是由頁高速緩存來承載的)。

到這裡我們應該搞清楚了:無論是緩衝區還是頁高速緩存,它們的實作方式都是一樣的。緩衝區只不過是一種概念上比較特殊的頁高速緩存罷了。
那麼為什麼 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
登入後複製

如果系统的内存不足,则需要根据物理内存的大小来设置交换空间的大小。具体的策略网上有很丰富的资料,这里笔者不再赘述。

/proc/meminfo 文件

其实 free 命令中的信息都来自于 /proc/meminfo 文件。/proc/meminfo 文件包含了更多更原始的信息,只是看起来不太直观:

$ cat /proc/meminfo
登入後複製

有兴趣的同学可以直接查看这个文件。

总结

free 命令是一个既简单又复杂的命令。简单是因为这个命令的参数少,输出结果清晰。说它复杂则是因为它背后是比较晦涩的操作系统中的概念,如果不清楚这些概念,即便看了 free 命令的输出也 get 不到多少有价值的信息。

相关推荐:《Linux视频教程

以上是linux中free是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1249
24
Linux體系結構:揭示5個基本組件 Linux體系結構:揭示5個基本組件 Apr 20, 2025 am 12:04 AM

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

git怎麼查看倉庫地址 git怎麼查看倉庫地址 Apr 17, 2025 pm 01:54 PM

要查看 Git 倉庫地址,請執行以下步驟:1. 打開命令行並導航到倉庫目錄;2. 運行 "git remote -v" 命令;3. 查看輸出中的倉庫名稱及其相應的地址。

vscode上一步下一步快捷鍵 vscode上一步下一步快捷鍵 Apr 15, 2025 pm 10:51 PM

VS Code 一步/下一步快捷鍵的使用方法:一步(向後):Windows/Linux:Ctrl ←;macOS:Cmd ←下一步(向前):Windows/Linux:Ctrl →;macOS:Cmd →

notepad怎麼運行java代碼 notepad怎麼運行java代碼 Apr 16, 2025 pm 07:39 PM

雖然 Notepad 無法直接運行 Java 代碼,但可以通過借助其他工具實現:使用命令行編譯器 (javac) 編譯代碼,生成字節碼文件 (filename.class)。使用 Java 解釋器 (java) 解釋字節碼,執行代碼並輸出結果。

sublime寫好代碼後如何運行 sublime寫好代碼後如何運行 Apr 16, 2025 am 08:51 AM

在 Sublime 中運行代碼的方法有六種:通過熱鍵、菜單、構建系統、命令行、設置默認構建系統和自定義構建命令,並可通過右鍵單擊項目/文件運行單個文件/項目,構建系統可用性取決於 Sublime Text 的安裝情況。

Linux的主要目的是什麼? Linux的主要目的是什麼? Apr 16, 2025 am 12:19 AM

Linux的主要用途包括:1.服務器操作系統,2.嵌入式系統,3.桌面操作系統,4.開發和測試環境。 Linux在這些領域表現出色,提供了穩定性、安全性和高效的開發工具。

laravel安裝代碼 laravel安裝代碼 Apr 18, 2025 pm 12:30 PM

要安裝 Laravel,需依序進行以下步驟:安裝 Composer(適用於 macOS/Linux 和 Windows)安裝 Laravel 安裝器創建新項目啟動服務訪問應用程序(網址:http://127.0.0.1:8000)設置數據庫連接(如果需要)

git軟件安裝 git軟件安裝 Apr 17, 2025 am 11:57 AM

安裝 Git 軟件包括以下步驟:下載安裝包運行安裝包驗證安裝配置 Git安裝 Git Bash(僅限 Windows)

表1 free 指令常用選項及意義
選項意義