顯示具有 buff 標籤的文章。 顯示所有文章
顯示具有 buff 標籤的文章。 顯示所有文章

2024年7月19日 星期五

清除 Linux 機器上的 Swap (Buff、Cache、Swap 比較)

 

今天在工作時,遇到機器的 Swap 超過預警值,需要手動去清除 Swap,那剛好就由這次機會來介紹要如何清除 Linux 機器上的 Swap,以及查詢 Linux 記憶體的使用狀況!


如何查詢 Linux 記憶體

在講 Swap 之前,我們先來說一下怎麼查詢 Linux 記憶體,可以使用以下指令來顯示:

free

下完後,格式會長這樣:

              total        used        free      shared  buff/cache   available
Mem:       32765564     8499252     1825132     1857720    22441180    19693100
Swap:      16776188           0    16776188

但這樣子不是很好觀察,所以我們可以加上 -h 來顯示大小的單位,讓我更清楚的知道每一個的大小:

              total        used        free      shared  buff/cache   available
Mem:            31G        8.1G        1.6G        1.8G         21G         18G
Swap:           15G          0B         15G

那我們接著先來說說使用 free 查詢後,所有欄位的意思吧!

free 第一列

  • Mem:記憶體的使用資訊
  • Swap:交換空間的使用資訊

free 第一行

  • total:系統總共的可用實體記憶體大小
  • used:已被使用的實體記憶體大小
  • free:還剩下多少可用的實體記憶體
  • shared:被共享使用的實體記憶體大小
  • buff/cache:被 buffer 和 cache 使用的實體記憶體大小
  • available:可被 應用程式 使用的實體記憶體大小

buff 跟 cache 以及 Swap 的比較

比較buffcacheSwap
功用記憶體寫完資料會先暫存起來,等之後再定期將資料存到硬碟上記憶體讀完資料後暫存起來,可以在下此查詢時快速的顯示硬碟的交換分區,當 buff/cache 記憶體已經用完後,又有新的讀寫請求時,就會將部份內存的資料存入硬碟,也就是把內存的部分空間當成虛擬的記憶體來做使用

free 與 available 的比較

  • free:是真正尚未被使用的實體記憶體數量
  • available:是應用程式認為可用的記憶體數量,可以理解成 available = free + buff/cache

接下來我們就要進入主題,如何清除 Swap :

清除 Swap

首先第一步我們先使用 free 來查看目前的 Swap 使用狀態:


Swap 使用 (尚未清除)

Swap 使用 (尚未清除)

可以看到我們的 Swap used 是 797M,我們設定它不能超過 5%,超過就會通知,所以我們要把它手動清除。


先檢查記憶體 available

為什麼要先檢查 available,是因為一開始會使用到 Swap 的原因就是因為應用程式的可用記憶體空間不足,所以現在要清除 Swap 條件就是:Mem 的 available 必須要大於 Swap 的 used 才可以,否則會導致記憶體爆炸 💥


將記憶體資料暫存到硬碟

接下來因為我們要清除 Swap ,所以不能讓資料在寫入記憶體中,所以我們先使用下方指令,讓記憶體的資料暫存到硬碟。

sync

這個指令就是將存於暫存的資料強制寫入到硬碟中,來確保清除時導致資料遺失。

關閉 Swap,再打開 Swap

沒錯,Swap 的清除就是把他先關掉,再重新打開,他就會自己清除 Swap 的資料了!使用的指令如下:(清除過程需要稍等,讓他進行刪除動作)

swapoff -a && swapon -a

確認都沒問題後,我們就使用 free 來重新查看記憶體狀態:


Swap 使用 (已清除)

Swap 使用 (已清除)

可以看到我們清除完 Swap 後,Swap 的 used 已經從 797M 變成 0B。


如果碰到執行 swapoff -a && swapon -a 出現 swapoff: Not superuser.,只需要在指令前面加上 sudo 就可以了!

參考資料

Linux 內存、Swap、Cache、Buffer 詳細解析:https://os.51cto.com/article/636622.html

linux free 命令下 free/available 區別:https://www.796t.com/content/1545715382.html

釋放 linux 的 swap 記憶體:https://www.796t.com/article.php?id=207781

 

資料來源:https://pin-yi.me/blog/other/linux-clear-swap/