2011-03-16 194 views
0

我想知道是否有任何方法來設置緩衝區緩存可用地址空間的上限?我想認爲沒有限制,一旦內存使用到達某一點,其他進程會被換出來使緩衝區緩存擴展?限制緩衝區緩存

說了這麼多,我想如果說到這一點,讀取/寫入可能會失敗吧?

+0

你爲什麼認爲讀寫會失敗? – Zimbabao 2011-03-17 06:25:46

回答

3

只是因爲BufferCache佔用大量內存,讀寫不會失敗。只有未使用的RAM用作高速緩存磁盤的緩衝區,但如果某個進程需要內存,它將獲得更高的優先級。這是由內核自動完成的,緩衝區緩存只是資源的最佳利用,它不會損害系統的正常工作。

+0

我想我不太在意讀/寫失敗 - 我知道如果緩衝區緩存變得太大,我的進程將被換出,這是我從不想要的。所以,除了調整swappiness等,我寧願在緩衝區緩存上設置一個上限,如果可能的話 – stackmate 2011-03-17 11:22:38

+0

只有未使用的進程的一部分將被換出。例如,有時候人們製造的緩衝池或堆太大,現在因爲你不需要那麼多,因爲你的數據較少,在這種情況下它會被換出。如果你解釋你真正的問題,它會有幫助。 – Zimbabao 2011-03-17 12:18:24

+1

vm.vfs_cache_pressure是您可以檢查的另一個參數。它在0到200之間,100是默認值。 0支持inode,dentry緩存(非常小),200支持數據緩存。交換與此參數一起可以幫助您獲得所需的內容。限制緩衝區緩存是不可能的。 – Zimbabao 2011-03-17 12:26:14

1

一般問題不是讀寫會失敗,但是你的應用程序會凍結並最終失敗。這是一個非常簡單的實驗。獲取非常大的文件目錄並將其複製到非常慢的設備。你會發現100%的可用內存將被寫入緩存消耗。只有通過寫入慢速設備才能清除此緩存。問題是當應用程序需要內存或需要交換已交換到磁盤的內容時發生的情況?由於緩存空間太慢,唯一真正的選擇是將其他內容交換到磁盤以提供更多內存。所以現在整個系統都在顛簸。如果你沒有交換空間,那麼你有嚴重的問題。無論哪種方式,您的桌面是相當長的,甚至可能完全鎖定,直到您的複製完成。

雖然我不知道要解決這個問題,但可以將vm.vfs_cache_pressure調整爲0,將vm.swappiness調整爲0以幫助減少此問題。

+0

這正是我所看到的問題。我已經嘗試將vm.vfs_cache_pressure設置爲1(也是0),將vm.swappiness設置爲0,這隻會有所幫助:複製大文件時,緩衝區仍然佔用一半內存,只剩下其他程序的一對夫婦,從而使它們真的慢。 – Mihai 2014-06-04 22:24:10