關于基礎的Swap分區(qū)知識講解
Swap分區(qū),即交換區(qū),除了安裝Linux的時候,有多少人關心過它呢?其實,Swap分區(qū)的調整對Linux服務器,特別是Web服務器的性能至關重要。通過調整Swap分區(qū),有時可以越過系統(tǒng)性能瓶頸,節(jié)省系統(tǒng)升級費用。
Swap分區(qū)的原理是一個較復雜的問題,需要大量的篇幅來說明。在這里只作簡單的介紹,在以后的文章中將和大家詳細討論Swap實現(xiàn)的細節(jié)。
眾所周知,現(xiàn)代操作系統(tǒng)都實現(xiàn)了“虛擬內存”這一技術,不但在功能上突破了物理內存的限制,使程序可以操縱大于實際物理內存的空間,更重要的是,“虛擬內存”是隔離每個進程的安全保護網(wǎng),使每個進程都不受其它程序的干擾。
Swap空間的作用可簡單描述為:當系統(tǒng)的物理內存不夠用的時候,就需要將物理內存中的一部分空間釋放出來,以供當前運行的程序使用。那些被釋放的空間可能來自一些很長時間沒有什么操作的程序,這些被釋放的空間被臨時保存到Swap空間中,等到那些程序要運行時,再從Swap分區(qū)中恢復保存的數(shù)據(jù)到內存中。這樣,系統(tǒng)總是在物理內存不夠時,才進行Swap交換。
計算機用戶會經(jīng)常遇這種現(xiàn)象。例如,在使用Windows系統(tǒng)時,可以同時運行多個程序,當你切換到一個很長時間沒有理會的程序時,會聽到硬盤“嘩嘩”直響。
這是因為這個程序的內存被那些頻繁運行的程序給“偷走”了,放到了Swap分區(qū)中。因此,一旦此程序被放置到前端,它就會從Swap區(qū)取回自己的數(shù)據(jù),將其放進內存,然后接著運行。
需要說明一點,并不是所有從物理內存中交換出來的數(shù)據(jù)都會被放到Swap分區(qū)中(如果這樣的話,Swap就會不堪重負),有相當一部分數(shù)據(jù)被直接交換到文件系統(tǒng)。
例如,有的程序會打開一些文件,對文件進行讀寫(其實每個程序都至少要打開一個文件,那就是運行程序本身),當需要將這些程序的內存空間交換出去時,就沒有必要將文件部分的數(shù)據(jù)放到Swap分區(qū)空間中了,而可以直接將其放到文件里去。
如果是讀文件操作,那么內存數(shù)據(jù)被直接釋放,不需要交換出來,因為下次需要時,可直接從文件系統(tǒng)恢復;如果是寫文件,只需要將變化的數(shù)據(jù)保存到文件中,以便恢復。
但是那些用malloc和new函數(shù)生成的對象的數(shù)據(jù)則不同,它們需要Swap分區(qū)空間,因為它們在文件系統(tǒng)中沒有相應的“儲備”文件,因此被稱作“匿名”(Anonymous)內存數(shù)據(jù)。這類數(shù)據(jù)還包括堆棧中的一些狀態(tài)和變量數(shù)據(jù)等。所以說,Swap空間是“匿名”數(shù)據(jù)的交換空間。
【編輯推薦】