刪除linux快取記憶體

刪除linux快取記憶體

我有一個網頁伺服器,有 8GB 內存,正在運行一個相當密集的 php 網站(1 個網站),可以進行文件操作、繪圖、發送電子郵件、論壇等等。環境遠非靜態,這讓我相信在記憶體中快取任何內容幾乎沒有好處,因為幾乎每個對伺服器的請求都會創建新的或更新的頁面。大量快取是在客戶端完成的,因此當涉及到映像、javascript、css 時,我們會遇到大量 304 請求。

此外,我確實有一些語言文件被寫入伺服器上的平面文件,其中快取的記憶體肯定比從磁碟讀取更好。但這樣的文件屈指可數。

大約兩週內,我的可用記憶體從 98% 增加到 4%。這種情況發生在我們也將多個大型 svn 更新推送到伺服器期間。

我的問題是,如果我使用以下命令定期清除快取(我知道 Linus Torvalds 對快取的感覺),我的伺服器是否會得到更好的調整:

sync; echo 3 > /proc/sys/vm/drop_caches

或者我最好編輯以下文件:

/proc/sys/vm/swappiness  

如果我用 30 替換預設值 60,我應該會減少進行的交換,並更多地重複使用過時的快取。

看到使用第一個命令釋放所有快取確實感覺很好,但如果我告訴你這對桌面環境有好處,那我就是在騙你。但是像我上面描述的那樣的網頁伺服器怎麼樣呢?想法?

編輯:我知道系統會在需要時從緩存中獲取內存,但感謝您指出我們的清晰性。當大部分伺服器記憶體儲存在快取中時,Apache 會變慢,這是我想像的事情嗎?這是一個完全不同的問題嗎?

答案1

清除快取會影響效能,而不是有幫助。如果 RAM 需要用於其他用途,那麼它將被其他用途使用,因此您所做的就是在執行清除操作後暫時降低快取命中/未命中率。

如果快取中的資料非常過時(即,它是在異常操作期間快取的內容),它將根據需要替換為「較新」的數據,而無需您人為地清除它。

正常運行的唯一原因sync; echo 3 > /proc/sys/vm/drop_caches是,如果您要嘗試進行一些I/O 效能測試,並希望從一個已知狀態開始(在運行之間運行快取刪除,以減少由於每個快取的啟動方式不同而導致的結果差異)跑步)。

即使有足夠的 RAM 可以從快取/緩衝區中收回,核心有時也會交換一些頁面,如果您發現它對您的伺服器來說是一個問題,那麼調整交換設定可以阻止這種情況。您可能會從中看到一點好處,但可能會看到暫時的效能降低透過人為地清除快取+緩衝區。

相關內容