Linux 下釋放內存,swap交換區緩存

關於內存耗盡的總結:



1)在進程收到OOM之前,內核將刷新文件系統的cache來釋放空間.

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

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

4)當進程消耗盡交換內存後,纔會引發out-of-memory(OOM)來kill那些進程.


所以,我們還是有必要來手動進行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的作用可簡單描述爲:

當內存不夠用時,將存儲器中的數據塊從DRAM移到swap的磁盤空間中,以釋放更多的空間給當前進程使用.

當再次需要那些數據時,就可以將swap磁盤中的數據重新移到內存,而將那些不用的數據塊從內存移到swap中.


2)數據從內存移動交換區的行爲被稱爲頁面調用,發生在後臺的頁面調用沒有來自應用程序的干涉.


3)swap空間是分頁的,每一頁的大小和內存頁的大小一樣.


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


##在執行以上操作以後,查看你的swap分區還是滿了,你首先查看一下你實際的內存剩多少空間,然後在查看自己的swap空間用了多少,首先提前保證實際剩餘的內存比你的swap的內存的空間要大,然後執行一下操作,否則會宕機的!


首先我們停掉swap分區,

會查看到你的swap分區是掛在哪裏!

# swapon -s


然後比如說我的是掛到/dev/dm-1

# swapoff   /dev/dm-1


停止是需要一段時間的,因爲他會把內存釋放到實際內存當中,


然後在啓動我們的swap分區

# swapon -a


我們的swap分區內存已經成功釋放到了實際內存當中!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章