2009-03-01 40 views
27

我想強制Linux內核在緩存開始佔用太多內存之後爲應用程序分配更多的內存(如'free'輸出所示)。如何清理Linux內核使用的緩存

我已經運行

sudo sync; sudo sysctl -w vm.drop_caches=3; free 

(釋放閥瓣的dentry /索引節點緩存和頁面緩存),而我看到,只有關於所使用的高速緩存的一半被釋放 - 其餘部分保持。我怎麼知道什麼是佔用緩存的其餘部分並強制它被釋放?

+0

停留的chache只是當需要新內存時立即拋出的緩存。強制刪除這些緩存區域是不利的。應用程序將永遠是第一個公民的記憶,並不需要爲緩存而戰。 – ypnos 2009-03-02 11:14:50

+1

我的服務器出現問題,我認爲有些內容濫用緩存,導致應用程序被移出頁面並由於內存不足而發生抖動。這可能是它可能不是的內核問題。清除緩存可能是一種很好的測試方法。 – Guss 2009-03-02 14:57:49

+0

你的'sysctrl'必須是'sysctl' – raittes 2016-04-26 13:53:34

回答

17

您將希望增加vfs_cache_pressure以及將swappiness設置爲0.這樣做會使內核更快地回收緩存,同時在決定wh時給予進程同等或更多的優惠在被分頁。你只需要想要這樣做,如果你關心的進程做的磁盤I/O很少。如果網絡I/O綁定進程需要交換來爲請求提供服務,那麼這是一個問題,真正的解決方案是將其放在競爭力較弱的服務器上。

使用默認的swappiness設置,內核幾乎總是傾向於在實際內存中保留與FS相關的緩存。所以如果你增加緩存壓力,一定要調整swappiness。

16

/proc/meminfo的內容告訴你內核使用RAM的內容。

您可以使用/proc/sys/vm/vfs_cache_pressure強制內核更懶惰地或熱切地回收用於文件系統相關緩存的內存。

請注意,如果您的應用程序很少或不需要磁盤I/O,那麼您的應用程序可能只會從調整此參數中受益。

15

您可能會發現John Nilsson's answer to my Question有用的清除緩存,以測試是否是有關您的問題:

sync && echo 1 > /proc/sys/vm/drop_caches

雖然我猜唯一真正的區別是1比3