首先介紹一下linux中記憶體是如何使用的。
當有應用需要讀寫磁碟資料時,由系統把相關資料從磁碟讀取到記憶體,如果物理記憶體不夠,則把記憶體中的部分資料匯入到磁碟,從而把磁碟的部分空間當作虛擬記憶體 來使用,也稱為swap。如果給所有應用分配足夠記憶體後,物理記憶體還有剩餘,linux會盡量再利用這些空閒記憶體,以提高整體i/o效率,其方法是把這部 分剩餘記憶體再劃分為cache及buffer兩部分加以利用。
從磁碟讀取到記憶體的資料在被相關應用程式讀取後,如果有剩餘記憶體,則這部分資料會存入cache,以備第2次讀取時,避免重新讀取磁碟。當乙個應用程式在 記憶體中修改過資料後,因為寫入磁碟速度相對較低,在有空閒記憶體的情況下,這些資料先存入buffer,在以後某個時間再寫入磁碟,從而應用程式可以繼續後 面的操作,而不必等待這些資料寫入磁碟的操作完成。
如果在某個時刻,系統需要更多的記憶體,則會把cache部分擦除,並把buffer中的內容寫入磁碟,從而把這兩部分記憶體釋放給系統使用,這樣再次讀取cache中的內容時,就需要重新從磁碟讀取了。
通過以上分析可以得知,空閒物理記憶體不多,不一定表示系統執行狀態很差,因為記憶體的cache及buffer部分可以隨時被重用,在某種意義上,這兩部分記憶體也可以看作詩額外的空閒記憶體。swap如果被頻繁呼叫,bi,bo長時間不為0,則才是記憶體資源是否緊張的依據。
例如:total 4g used 3g free 1g buffer 1g cache 1g
系統當前能使用的memory總量 = free + buffer + cache = 3g
linux中記憶體使用原理
首先介紹一下linux中記憶體是如何使用的。當有應用需要讀寫磁碟資料時,由系統把相關資料從磁碟讀取到記憶體,如果物理記憶體不夠,則把記憶體中的部分資料匯入到磁碟,從而把磁碟的部分空間當作虛擬記憶體 來使用,也稱為swap。如果給所有應用分配足夠記憶體後,物理記憶體還有剩餘,linux會盡量再利用這些...
MongoDB記憶體使用原理
但凡初次接觸mongodb的人,無不驚訝於它對記憶體的貪得無厭,至於個中緣由,我先講講linux是如何管理記憶體的,再說說mongodb是如何使用記憶體的,答案自然就清楚了。據說帶著問題學習更有效,那就先看乙個mongodb伺服器的top命令結果 shell top p pidof mongod m...
linux記憶體對映mmap原理分析
一直都對記憶體對映檔案這個概念很模糊,不知道它和虛擬記憶體有什麼區別,而且對映這個詞也很讓人迷茫,今天終於搞清楚了。下面,我先解釋一下我對對映這個詞的理解,再區分一下幾個容易混淆的概念,之後,什麼是記憶體對映就很明朗了。首先,對映 這個詞,就和數學課上說的 一一對映 是乙個意思,就是建立一種一一對應...