2011-11-10 27 views
0

確定在這個問題評論:如何保持高速緩存中的二等公民

How to clean caches used by the Linux kernel

ypnos聲稱:

「應用永遠是第一位公民的內存,並且沒有與緩存戰鬥。「

嗯,我認爲我的緩存是反叛的,不想接受它的社會階層。我這裏跑了實驗:

http://www.linuxatemyram.com/play.html

第1步:

$ free -m 
total used free shared buffers cached 
Mem: 3015 2901 113 0 15 2282 
-/+ buffers/cache: 603 2411 
Swap: 2406 2406 0 

所以2282MB所使用的高速緩存和113MB是免費的。

現在:

$ ./munch 
Allocated 1 MB 
Allocated 2 MB 
Allocated 3 MB 
Allocated 4 MB 
. 
. 
. 
Allocated 265 MB 
Allocated 266 MB 
Allocated 267 MB 
Allocated 268 MB 
Allocated 269 MB 
Killed 

OK,Linux的給我,慷慨另一個156MB,這就是它!那麼,我該如何告訴Linux我的程序比2282MB緩存更重要?

其他信息:我/家已加密。

更多的人有同樣的問題(這使加密假設不是很合理):

https://serverfault.com/questions/171164/can-you-set-a-minimum-linux-disk-buffer-size

https://askubuntu.com/questions/41778/computer-freezing-on-almost-full-ram-possibly-disk-cache-problem

+0

什麼是'overcommit_memory'設置(在/ proc/sys/vm/overcommit_memory中)?有可能大部分的空閒內存都被分配給尚未觸及它的其他進程。 '/ proc/meminfo'也提供比'free'更詳細的信息。 – caf

回答

0

我不知道Linux特有的東西,但一個好的操作系統會跟蹤內存頁面被訪問的次數,以及多久以前。如果最近訪問得不多,可以將其交換出來,並使用RAM進行緩存。 此外,分配但未使用的內存也可以發送到交換,因爲有時程序分配的實際需要會比實際需要的多,所以很多內存頁就會坐滿您的內存。

+0

但問題是,現在我需要內存和Linux不給我,即使內存技術上可用於程序(緩存應該只使用內存,如果沒有人需要它) –

+0

嗯,你真的使用該內存,或剛分配它?如果你使用它,緩存應該縮小,你的程序應該使用所有的RAM。 – Radu

+0

正如你可以檢查鏈接,程序在分配內存後運行這一行: memset(buffer,0,1024 * 1024)'這意味着它使用ram。然而,緩存保持穩定,我的程序死亡。 –

1

要了解內核緩存的內容,它的設計要儘可能高效。這通常意味着當沒有別的東西要求記憶時,放入緩存的東西就會留在那裏。

這是準備幸運的內核,以防再次詢問緩存中的內容。如果沒有其他人需要記憶,那麼釋放它就沒有什麼好處。

+0

但是「I」需要內存,而Linux並沒有給我,因爲它已經將它用於緩存。有時Linux會關閉我的瀏覽器,顯示「內存不足」錯誤,而緩存使用2GB,這是一個嚴重的問題。 –

+0

對不起,我錯過了你的原創點。這就是說,你的問題比報道更奇怪。免費的輸出實際上表明你有2411MB空閒( -/+緩衝區/緩存行)。當munch運行時,實際的空閒內存也許被另一個進程佔用了?您可以在您的munch程序中進行睡眠,以在內存分配之間休眠1秒,然後運行「free -m -s 1」以在運行Munch時監視內存使用情況。 – bigendian

+1

您也可能會遇到流程可分配內存量的限制。檢查「ulimit -a」的輸出以查看shell上的任何內存限制。 – bigendian

0

我發現,如果我通過

#swapoff -a 

的問題會消失關閉掉。如果我換了,當我要求更多的內存時,那麼linux會嘗試將緩存移動到交換位置,然後交換完成,然後Linux暫停整個操作,而不是放下緩存。這導致「內存不足」。但沒有交換,Linux知道它沒有希望,但放棄了緩存。

我認爲這是Linux內核中的一個bug。

從這個加入到這個問題的鏈接的一個暗示:

的sysctl -w vm.min_free_kbytes = 65536

幫助,對我64MG我仍然可以很容易地陷入困境。我正在使用128MG的餘量,當貪婪的緩存到達那裏時,機器變得非常慢,但不像之前它不凍結。我會檢查256MG的餘量,看看是否會有改善。

+0

緩存永遠不會「移動到交換」。骯髒的頁面緩存頁面被寫回到其後備存儲,乾淨的頁面緩存頁面被簡單地刪除。 – caf