2017-02-21 74 views
0

我對Linux內存管理概念很新,在閱讀一些內存管理相關文檔時我有一些基本疑問請澄清我。什麼是內存回收在linux中

下面考慮的是我的配置

vm.swappiness=10 
vm.vfs_cache_pressure=140 
vm.min_free_kbytes=2013265 

我的理解,如果可用內存比vm.min_free_kbytes OS少了會回收內存。

1-內存回收是刪除不需要的文件或複製到從RAM交換內存?

2-如果它從RAM複製到交換存儲器,那麼如果我沒有使用SWAP存儲器,會發生什麼情況?

3- swappiness總是大於vm.min_free_kbytes?

4-vm.vfs_cache_pressure的含義是什麼?

謝謝你.. !!

回答

0
  1. 內存回收是通過向其他位置存儲數據的其他位置創建更多空閒RAM頁面的機制。它與文件無關。當需要更多RAM時,數據從RAM中丟棄(如果可以重新獲取,則丟棄)或複製到交換文件(因此數據可以重新獲取)。

  2. 如果沒有交換文件,但某些數據應保存到(不存在的)交換區域,則會發生內存不足錯誤。通常,這被通知給嘗試獲取內存的進程(通過alloc()和類似的) - alloc()失敗並返回NULL。該過程可以選擇要做什麼,甚至是崩潰。如果內核本身需要內存(通常非常少見),則會發生PANIC並且系統完全鎖定。

  3. swappiness以百分比表示內核使用swap的傾向(即使不是嚴格需要),以便爲內存請求準備足夠的ram。簡而言之,100%的swappiness意味着內核試圖始終交換,swappiness爲0意味着內核試圖不交換(但是有一些特殊的值)。 min_free_kbytes表示真正的kylobytes,它不是一個百分比,並且它是爲了讓內核正常工作而應該始終空閒的最小數量。即使開始內存回收,也可能需要更多內存來完成這項工作:如果要獲得一些內存,只需要一點內存,但卻沒有它,這將是災難性的! :-)

  4. vfs_cache_pressure再次是一個百分比。它指示內核嘗試擺脫用於文件系統(vfs =虛擬文件系統)的(內存)緩存的程度。文件系統的緩存是一個不錯的選擇,因爲它使信息易於從磁盤讀取。不幸的是,如果計算機需要經常使用文件系統,它必須讀取並再次讀取,並且再次讀取相同的數據。緩存它是一個巨大的性能提升。當然,如果一個系統的磁盤I/O很少,那麼這個緩存是在內存餓的時候最好的選擇。

所有這些事情都succintly這裏解釋:https://www.kernel.org/doc/Documentation/sysctl/vm.txt

+0

感謝很多關於你的答案,只有一個問題要得到清晰 如果沒有交換分區, min_free_kbytes = 2G 和系統空閒內存達到2GB是否將數據(Cache.buffer,..)刪除或系統將進入OOM狀態? –

+0

@MohamedAshraf我鏈接的文檔非常簡潔,並且表示「將此設置得太高會立即將您的機器OOM」。我認爲只要內核能夠拋棄數據(實際上只有緩存),內核就會工作,然後進入一個無限循環,試圖達到指示的min_free_kbytes,而不成功。但我不確定。 – linuxfan