為了突破物理內存的限制,在操作系統中實現了“虛擬內存”技術。它使得應用程序可以操縱大於實際物理內存的空間。而且虛擬內存可以用來隔離每個進程,成為進程的安全保護網,使得每個進程都不受其他程序的干擾。如果swap空間不夠會產生什麼負面作用呢?簡單的來說,如果系統的物理內存用光了,系統就反映速度會變得很慢,但是操作系統仍能運行;如果Swap空間用光了,那麼系統就會發生錯誤。例如,Web服務器能根據不同的請求數量衍生出多個服務進程或線程,如果Swap空間用完,則服務進程無法啟動,就會出現swap空間不足的錯誤,嚴重時會造成服務進程的死鎖。可見Swap空間的分配是很重要的。如果swap空間太小會造成應用程序錯誤,而不光光是性能下降的問題。
在Linux系統下,這個虛擬內存就被叫做swap。在安裝操作系統的時候,安裝向導會提示用戶需要創建多少的swap空間。通常情況下,swap比較合適的大小為物理內存的1-2倍。但是有些應用程序的話,對於swap分區比較饑渴,如JAVA或者Oracle應用程序,他們要求swap分區的大小能夠達到物理內存的2倍以上。此時原先在安裝系統的時候為其分配的swap分區就太小了。那麼該如何補救呢?
筆者以前就遇到過類似的問題。有一台Linux服務器,上面已經部署了文件服務器。後來出於部署ERP系統的需要,要在這台服務器上部署一個Oracle數據庫系統。不過Oracle數據庫系統對swap的空間有要求。如果不滿足這個要求的話,Oracle操作系統無法安裝。而筆者不能夠通過重裝Linux服務器的方式來擴展swap空間,因為上面還運行著文件服務器。為此筆者只好通過其他途徑來實現這個需求了。針對這種情況,Linux系統提出了兩種補救措施,分別為創建新的swap空間和創建swap 文件。筆者是通過創建swap文件的方式來調整swap空間的。如上圖所示,筆者就在home目錄下創建了一個swap文件,並且通過啟動配置文件讓其隨著系統的啟動而自動啟用。如此配置之後,Oracle數據庫系統就可以順利安裝了。
這兩種調整方式的具體的實現方式如下所示。
措施一:創建新的swap空間,增加swap容量。
如果在Linux服務器的硬盤中還有比較多的空余容量,或者系統管理員添置了新硬盤,此時就可以利用Linux系統自帶的fdisk硬盤格式化工具,來創建新的swap分區。具體的操作如下:
第一步:創建新的分區。如筆者在服務器硬盤中還有一個20G的分區沒有使用過,就可以利用fdisk磁盤格式化工具,來創建新的分區。具體fdisk命令的使用方法大家可以參考其它的相關資料,筆者在這裡就不過多展開了。在使用這個工具的時候,如果要把分區設置為swap分區,則需要注意要把空間設置為擴展分區。然後再在擴展分區上設置一個邏輯分區。如此的話,為後續維護與管理提供了方便。如管理員可以陸續增加swap空間等等。
第二步:將分區的文件系統設置為swap文件系統。
默認情況下系統新增加的分區其文件格式為ext3。為了讓這個分區成為swap分區,則需要把這個分區的文件格式改為swap文件系統。這個任務也是在fdisk命令中完成。如果要把這個分區格式改為swap,則在fdisk命令執行時,當提示hex code時,系統管理員需要輸入swap文件系統的代號。通常情況下swap文件系統的代號為82。然歐再繼續後續的工作。如果不修改的話,則系統默認會采用ext3文件系統格式。
第三步:格式化並啟動swap分區格式。當fdisk命令執行完畢後,還必須重新啟動計算機,剛才的設置才會生效。但是,fdisk命令只是劃分出了一個swap分區,系統還是無法使用這個分區,因為這個分區還沒有格式化與啟動。與微軟操作系統一樣,當劃分出一個分區之後,系統管理員還需要格式化這個分區。為此,系統管理員需要通過mkswap命令來對剛才劃分的swap分區進行格式化。不過與微軟操作系統不同的是,對分區格式化之後,這個新的分區默認情況下是沒有啟動的,第一次需要通過系統管理員手工啟動它。此時系統管理員需要采用的命令是swapon,來啟動swap分區。
通過以上簡單的三個步驟,就可以在硬盤為用的空間中或者新添加的硬盤中增加一個swap分區,以實現擴大swap分區容量的目的。不過這裡需要注意一點,在使用fdisk工具的時候,會把目標空間中的內容都刪除。為此只有當目標空間中沒有存儲文件或者存儲的文件不再需要時才使用這種方法。如果現在系統中沒有未使用的空間;但是已有的分區中則有多余的空間,則就需要采用另外一種方法,即通過增加swap文件的方式來調整swap空間容量。
措施二:創建swap文件調整swap容量。
當系統中的硬盤空間已經全部分配給其它分區,此時就不適合采用fdisk命令來增加swap分區的容量。因為這個命令會刪除目標空間的文件。遇到這種情況時,系統管理員需要采用創建swap文件的方式來增加虛擬的swap空間。簡單的說,就是在硬盤中創建一個虛擬的swap文件。通過這個文件讓其在系統硬盤中劃分出一個空間,供swap空間使用。
第一步:創建swap 文件。
系統管理員可以利用“dd bs= count=”這個命令來創建swap文件。這個命令中主要采用了bs與count兩個參數。其中bs參數制定每次讀取及輸入多少個字節。因為硬盤存取的最小單位為扇區,所以設置bs參數就相當於設置每個扇區的大小。通常情況下這個參數設置為32為好。參數count則主要是用來設置可以使用扇區的數量。所以這個文件所占用的空間就是以上連個參數的乘積。這裡需要注意的是,如果要增加swap文件容量,往往是通過調整count參數來實現的。也就是說,bs參數一般就是32,不需要去動它。
第二步格式化並啟動swap 文件。
跟上面的方法一樣,建立好文件之後還需要格式化這個文件並啟用它。這主要是因為到現在為止,這個文件用的還是硬盤中原來的文件系統格式,如為ext3等等。這個文件系統格式是不能夠用來做swap分區的擴展的。為此系統管理員需要先通過mkswap工具把這個文件格式化為swap文件格式。然後再使用swapon命令啟用這個文件。這個特性有點像微軟操作系統中的動態磁盤的概念。
雖然這兩種方式都可以解決swap分區過小的問題,但是這跟在安裝操作系統的時候劃分swap分區還是有一定的區別。如通過以上兩種方式建立的swap分區,不會隨著系統的重新啟動而自動啟動。而系統安裝時設置的swap分區則會在開機時自動啟動。如果每次開機後都要手工執行swapon命令來啟動swap分區或者文件的話,那麼這也太麻煩了。為了解決這個問題,就需要修改Linux系統的啟動配置文件。如系統管理員可以在啟動配置文件中加入一行內容,讓Linux系統開機時自動啟動swap分區以及文12下一頁