Linux 內存深究

Linux的內存使用以及優化是一個很有意思很深度的問題,在此寫一篇文章來回顧和記錄。

內存活動基本上可以用3個數字來量化,活動虛擬內存總量,交換(swapping)率和調頁(paging)率。其中第一個數字表明內存的總需求量,後兩個數字表示那些內存中有多少比例正處在使用之中.目標是減少內存活動或增加內存量,直到調頁率保持在一個可以接受的水平上爲止。

活動虛擬內存的總量(VM)=實際內存大小(size of real memory)(物理內存)+使用的交換空間大小(amount of swap space used),當程序運行需要的內存大於物理內存時,UNIX系統採用了調頁機制,即系統copy一些內存中的頁面到磁盤上,騰出來空間供進程使用,在日常的Linux系統中,偶爾的調頁,系統是可以忍受的,但是如果頻繁的調頁,則表明物理和虛擬內存不夠用,需要調出空間供其他的程序來使用,此時,應該考慮增加物理內存。

在Unix(Linux)中內存的管理,主要使用以下兩種方法:調頁算法,交換技術

調頁算法是將內存中最近不常使用的頁面換到磁盤上,把常使用的頁面(活動頁面)保留在內存中供進程使用。交換技術是系統將整個進程,而不是部分頁面,全部換到磁盤上。正常情況下,系統會發生一些交換過程。當內存嚴重不足時,系統會頻繁使用調頁和交換,這增加了磁盤I/O的負載。進一步降低了系統對作業的執行速度,即系統I/O資源問題又會影響到內存資源的分配。

Unix(Linux)的虛擬內存:

Unix的虛擬內存是一個十分複雜的子系統,它實現了進程間代碼與數據共享機制的透明性,並能夠分配比系統現有物理內存更多的內存,某些操作系統的虛存甚至能通過提供緩存功能影響到文件系統的性能,各種風格的UNIX的虛存的實現方式區別很大,但都離不開下面的4個概念。

1:實際內存
實際內存是指一個系統中實際存在的物理內存,稱爲RAM。實際內存是存儲臨時數據最快最有效的方式,因此必須儘可能地分配給應用程序,現在的RAM的形式有多種:SIMM、DIMM、Rambus、DDR等,很多RAM都可以使用糾錯機制(ECC)。

2:交換空間
交換空間是專門用於臨時存儲內存的一塊磁盤空間,通常在頁面調度和交換進程數據時使用,通常推薦交換空間的大小應該是物理內存的二到四倍。

3:頁面調度
頁面調度是指從磁盤向內存傳輸數據,以及相反的過程,這個過程之所以被稱爲頁面調度,是因爲Unix內存被平均劃分成大小相等的頁面;通常頁面大小爲4KB和8KB(在Solaris中可以用pagesize命令查看)。當可執行程序開始運行時,它的映象會一頁一頁地從磁盤中換入,與此類似,當某些內存在一段時間內空閒,就可以把它們換出到交換空間中,這樣就可以把空閒的RAM交給其他需要它的程序使用。

4:交換
頁面調度通常容易和交換的概念混淆,頁面調度是指把一個進程所佔內存的空閒部分傳輸到磁盤上,而交換是指當系統中實際的內存已不夠滿足新的分配需求時,把整個進程傳輸到磁盤上,交換活動通常意味着內存不足。

查看內存的使用,通常使用vmstat和free 下面我們來分析一下系統的案例:


其中Swpd:表明佔用了交換分區也就是swap分區,此時如果si,so的值爲0,表明只是在交換分區中緩存了一部分文件,而並沒有存在大量的頁面調度和交換,此時不要擔心OS的內存使用,

以上 free 指的是空閒的物理內存,

buff:作爲buffer cache的內存,對塊設備的讀寫進行緩衝

cache:作爲page cache的內存,文件系統的cache

當看到cache很大的時候,其實我們不需要擔心,因爲這是Linux的另外一個特性,大量佔用內存進行緩存,減少磁盤的IO,同時能夠較小CPU I/O的等待,而此時的cache 是可以被OS從新分配使用的。

SWAP
-si:交換內存使用,由磁盤調入內存
-so:交換內存使用,由內存調入磁盤
內存夠用的時候,這2個值都是0,如果這2個值長期大於0時,系統性能會受到影響,磁盤IO和CPU資源都會被消耗。

我發現有些朋友看到空閒內存(FREE)很少的或接近於0時,就認爲內存不夠用了,實際上不能光看這一點,Linux是搶佔內存式的OS,還要結合si,so,如果free很少,但是si,so也很少(大多時候是0),那麼不用擔心,系統性能這時不會受到影響。

參考資料:

寫本文的時候,抄襲了一下兩篇文章:感謝你們的貢獻讓我理解更多,謝謝。

http://kerrigan.sinaapp.com/post-7.html

http://bbs.linuxtone.org/thread-6473-1-1.html

符:vmstat虛擬內存統計信息說明

字段 描述
Swapd 當前正在使用的虛擬內存大小(KB),虛擬內存到達很低的閥值時,更多的數據被換頁到swap設備。
Free 當前應用程序可用的物理內存(KB)
Buff 物理內存緩存用作read()或write()操作的大小(KB)
Cache 物理內存映射到進程地址空間的大小(KB)
So 數據從RAM寫到swap磁盤的大小(KB)
Si 數據從swap磁盤寫回RAM的大小(KB)
Bo 磁盤塊從RAM換出到文件系統或swap設備的數目。
Bi 磁盤塊從文件系統或swap設備換入RAM的數目。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章