1. 程式人生 > >echo N>/proc/sys/vm/drop_caches清理快取

echo N>/proc/sys/vm/drop_caches清理快取

echo N>/proc/sys/vm/drop_caches清理快取

引言:核心視窗—proc檔案系統這篇筆記中,我們介紹了/proc主要體現程序及核心資訊狀態。與/proc下其它檔案的“只讀”屬性不同的是,管理員可對/proc/sys子目錄的許多檔案內容進行修改,以更改核心的執行特性。寫入操作一般類似於 echo DATA >/path/to/your/filename的格式進行。這裡以echo N>/proc/sys/vm/drop_caches為例介紹說明。

一、問題現象:

echo N > /proc/sys/vm/drop_caches , 當N數值不同時,free –m存在差異

1.1、echo寫入數值之前—free-m內容

首先檢視/proc/sys/vm/drop_caches的預設值,以便可以修改回來

這裡寫圖片描述
圖1、/proc/sys/vm/drop_caches預設值

然後free-m檢視此時記憶體使用情況,對於各欄位含義,可以參考:linux free命令使用

這裡寫圖片描述
圖2、未更改資料時free -m內容
1.2、echo寫入不同資料—free-m內容

執行echo 1 > /proc/sys/vm/drop_caches, 其中綠色框是標記發生改變的部分,由於buffers 和 cached數值變化,第一行free和used均發生變化。

這裡寫圖片描述
圖3、echo 1 > /proc/sys/vm/drop_caches

執行echo 2 > /proc/sys/vm/drop_caches, 其中綠色框是標記發生改變的部分,這次僅有buffers由0變為1,cached基本沒有變化。

這裡寫圖片描述
圖4、echo 2 > /proc/sys/vm/drop_caches

執行echo 3 > /proc/sys/vm/drop_caches, 這次基本上,和寫入2區別不大,沒有什麼變化。

這裡寫圖片描述
圖5、echo 3 > /proc/sys/vm/drop_caches

二、現象解釋:

  前面我們執行echo N > /proc/sys/vm/drop_caches,再free –m檢視記憶體使用情況,輸入不同的N值,free –m記憶體中快取buffers會有差異,現在我們就是要解釋/proc/sys/vm、drop_caches, 這個檔案到底是什麼?另外可以寫入哪些數值,具體適用於什麼場景。

2.1、核心文件說明
這裡寫圖片描述
圖6、linux核心文件關於drop_caches的說明

  可以看出,/proc/sys是一個虛擬檔案系統,我們可以通過對它的讀寫操作做為與kernel實體間進行通訊的一種手段。也就是說可以通過修改/proc中的檔案,來對當前kernel的行為做出調整。那麼我們可以通過調整/proc/sys/vm/drop_caches來釋放記憶體。其預設數值為0.

  向/proc/sys/vm/drop_caches中寫入內容,會清理快取。建議先執行sync(sync 命令將所有未寫的系統緩衝區寫到磁碟中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫對映檔案)。執行echo 1、2、3 至 /proc/sys/vm/drop_caches, 達到不同的清理目的。

2.2、使用建議

  這裡找到一份關於清理快取的使用建議手工釋放linux記憶體.

  實際專案中告訴我們,如果因為是應用有像記憶體洩露、溢位的問題,從swap的使用情況是可以比較快速可以判斷的,但free上面反而比較難檢視。相反,如果在這個時候,我們告訴使用者,修改系統的一個值,“可以”釋放記憶體,free就大了。使用者會怎麼想?不會覺得作業系統“有問題”嗎?所以說,我覺得既然核心是可以快速清空buffer或cache,也不難做到(這從上面的操作中可以明顯看到),但核心並沒有這樣做(預設值是0),我們就不應該隨便去改變它。

  一般情況下,應用在系統上穩定運行了,free值也會保持在一個穩定值的,雖然看上去可能比較小。當發生記憶體不足、應用獲取不到可用記憶體、OOM錯誤等問題時,還是更應該去分析應用方面的原因,如使用者量太大導致記憶體不足、發生應用記憶體溢位等情況,否則,清空buffer,強制騰出free的大小,可能只是把問題給暫時遮蔽了。

  我覺得,排除記憶體不足的情況外,除非是在軟體開發階段,需要臨時清掉buffer,以判斷應用的記憶體使用情況;或應用已經不再提供支援,即使應用對記憶體的時候確實有問題,而且無法避免的情況下,才考慮定時清空buffer。(可惜,這樣的應用通常都是執行在老的作業系統版本上,上面的操作也解決不了)。

三、小結:

  與/proc下其它檔案的“只讀”屬性不同的是,管理員可對/proc/sys子目錄的許多檔案內容進行修改,以更改核心的執行特性。寫入操作一般類似於 echo DATA >/path/to/your/filename的格式進行。本篇文章以echo N>/proc/sys/vm/drop_caches為例,介紹了寫入不同數值,清理快取的作用。

這裡寫圖片描述
圖7、管理員擁有寫許可權