Linux下如何釋放記憶體 swap分割槽滿了怎麼辦

2021-06-18 13:38:15 字數 2000 閱讀 3963

linux下如何釋放記憶體、swap分割槽滿了怎麼辦

在linux系統下,我們一般不需要去釋放記憶體,因為系統已經將記憶體管理的很好。但是凡事也有例外,有的時候記憶體會被快取占用掉,導致系統使用swap空間影響效能,此時就需要執行釋放記憶體(清理快取)的操作了。

linux系統的快取機制是相當先進的,他會針對dentry(用於vfs,加速檔案路徑名到inode的轉換)、buffer cache(針對磁碟塊的讀寫)和page cache(針對檔案inode的讀寫)進行快取操作。但是在進行了大量檔案操作之後,快取會把記憶體資源基本用光。但實際上我們檔案操作已經完成,這部分快取已經用不到了。這個時候,我們難道只能眼睜睜的看著快取把記憶體空間佔據掉麼?

關於記憶體耗盡的總結:

所以,我們還是有必要來手動進行linux下釋放記憶體的操作,其實也就是釋放快取的操作了。

要達到釋放快取的目的,我們首先需要了解下關鍵的配置檔案/proc/sys/vm/drop_caches。這個檔案中記錄了快取釋放的引數,預設值為0,也就是不釋放快取。他的值可以為0~3之間的任意數字,代表著不同的含義:

0 – 不釋放

1 – 釋放頁快取

2 – 釋放dentries和inodes

3 – 釋放所有快取

知道了引數後,我們就可以根據我們的需要,使用下面的指令來進行操作。

首先我們需要使用sync指令,將所有未寫的系統緩衝區寫到磁碟中,包含已修改的 i-node、已延遲的塊 i/o 和讀寫對映檔案。否則在釋放快取的過程中,可能會丟失未儲存的檔案。

#sync

接下來,我們需要將需要的引數寫進/proc/sys/vm/drop_caches檔案中,比如我們需要釋放所有快取,就輸入下面的命令:

#echo 3 > /proc/sys/vm/drop_caches

此指令輸入後會立即生效,可以查詢現在的可用記憶體明顯的變多了。

要查詢當前快取釋放的引數,可以輸入下面的指令:

#cat /proc/sys/vm/drop_caches

##在執行以上操作以後,檢視你的swap分割槽還是滿了,你首先檢視一下你實際的記憶體剩多少空間,然後在檢視自己的swap空間用了多少,首先提前保證實際剩餘的記憶體比你的swap的記憶體的空間要大,

注意:以下操作有可能會導致伺服器宕機,請慎用!

首先我們停掉swap分割槽,檢視swap分割槽

swapon -s 會檢視到你的swap分割槽是掛在**!

然後比如說我的是掛到/dev/sda2

swapoff   /dev/sda2

停止是需要一段時間的,因為他會把記憶體釋放到實際記憶體當中,

然後在啟動我們的swap分割槽

swapon -a

我們的swap分割槽記憶體已經成功釋放到了實際記憶體當中!

swap的概述

swap的作用可簡單描述為:

當記憶體不夠用時,將儲存器中的資料塊從dram移到swap的磁碟空間中,以釋放更多的空間給當前程序使用.

當再次需要那些資料時,就可以將swap磁碟中的資料重新移到記憶體,而將那些不用的資料塊從記憶體移到swap中.

2)資料從記憶體移動交換區的行為被稱為頁面呼叫,發生在後台的頁面呼叫沒有來自應用程式的干涉.

3)swap空間是分頁的,每一頁的大小和記憶體頁的大小一樣.

4)並不是一定要給每個系統劃分swap,比如大多數的嵌入式就沒有swap.

1)在程序收到oom之前,核心將重新整理檔案系統的cache來釋放空間.

2)將交換區的頁面移到磁碟上.

3)當記憶體變少時,虛擬性使每個程序通過交換區來做簡單的上下文環境切換.

4)當程序消耗盡交換記憶體後,才會引發out-of-memory(oom)來kill那些程序.

本文出自 「北京——東東」 部落格,請務必保留此出處

Linux下如何釋放記憶體

在linux系統下,我們一般不需要去釋放記憶體,因為系統已經將記憶體管理的很好。但是凡事也有例外,有的時候記憶體會被快取占用掉,導致系統使用swap空間影響效能,此時就需要執行釋放記憶體 清理快取 的操作了。linux系統的快取機制是相當先進的,他會針對dentry 用於vfs,加速檔案路徑名到in...

Linux下釋放記憶體

在linux系統下,我們一般不需要去釋放記憶體,因為系統已經將記憶體管理的很好。但是凡事也有例外,有的時候記憶體會被快取占用掉,導致系統使用swap空間影響效能,此時就需要執行釋放記憶體 清理快取 的操作了。linux系統的快取機制是相當先進的,他會針對dentry 用於vfs,加速檔案路徑名到in...

Linux下釋放記憶體

當在linux下頻繁訪問檔案後,物理記憶體會很快被用光,當程式結束後,記憶體不會被正常釋放,而是一直作為caching,因此我們很有必要手動清理系統快取釋放記憶體。第一步我們在清理快取前應該先執行sync。因為系統在操作的過程當中,會把你的操作到的檔案資料先儲存到buffer中去,因為怕你在操作的過...