淺談下linux的記憶體機制
Linux的記憶體管理採取的是分頁存取機制,為了保證實體記憶體能得到充分的利用,核心會在適當的時候將實體記憶體中不經常使用的資料塊自動交換到虛擬記憶體中,而將經常使用的資訊保留到實體記憶體。
各項指標:
--Mem
total1 實體記憶體總數: 3832M
used1 已使用的記憶體數: 2146M
free1空閒的記憶體數: 1685M
shared 當前廢棄不用的記憶體數: 一般都是0
buffers 快取記憶體數:177M (主要用來存放目錄裡面有什麼內容,檔案的屬性以及許可權等等)
cached 快取記憶體數:1206M(用來記憶我們開啟過的檔案和程式)
-/+ buffers/cache
used2 已使用的記憶體數:763M
free2 空閒記憶體數:3069M
--Swap(虛擬記憶體)
分配太多的Swap空間會浪費磁碟空間,而Swap空間太少,則系統會發生錯誤。 如果系統的實體記憶體用光了,系統就會跑得很慢,但仍能執行;如果Swap空間用光了,那麼系統就會發生錯誤。例如,Web伺服器能根據不同的請求數量衍生 出多個服務程序(或執行緒),如果Swap空間用完,則服務程序無法啟動,通常會出現“application is out of memory”的錯誤,嚴重時會造成服務程序的死鎖。因此Swap空間的分配是很重要的。
計算公式如下:
total = used1 + free1
total = used2 + free2
used1 = buffers + cache +used2
free2 = free1 + buffers + cache
也就是說,其實free1記憶體就算很少也沒事,你還要關注buffers 和cache值,相加才是最終的空閒記憶體。再換句話說,那就是,free1的記憶體降低,不能說這是記憶體使用率降低,應該說是記憶體利用率上升了。
windows和linux的記憶體機制最大的區別,就在於windows會給記憶體留一定空間,就算記憶體空閒也會讓程式使用虛擬記憶體;而linux是將要使用的程式優先放進記憶體,提高讀取速度。
windows的優勢在於,啟動新程式速度非常快,直接分配新記憶體就可以了。linux優勢就在於,啟動剛執行的程式或者讀取之前的資料會非常快。
所以,這就是為什麼windows會用來當做客戶端,而linux用來當服務端的原因。
當遇見記憶體不足時候,其實有一個很簡單粗暴的解決方法。那就是加記憶體條,如果一條不夠,那就加2條。。
總結:
linux是記憶體被快取,windows記憶體是被佔用。
不算彩蛋的小彩蛋:
Linux作業系統的記憶體執行原理,很大程度上是根據伺服器的需求來設計的,例如系統的緩衝機制會把經常使用到的檔案和資料快取在cached 中,linux總是在力求快取更多的資料和資訊,這樣再次需要這些資料時可以直接從記憶體中取,而不需要有一個漫長的磁碟操作,這種設計思路提高了系統的整 體效能。