Solaris7 交流 --- swap管理(SWAP的用處)
2024-07-26 00:29:56
供稿:網(wǎng)友
五、swap管理(SWAP的用處)
本文介紹了在Solaris平臺(tái)上Swap(交換)空間的基本概念、實(shí)現(xiàn)的原理以及對(duì)Swap(
交換)空間進(jìn)行監(jiān)控的方法和調(diào)整的策略。
什么是SWAP(交換)空間
對(duì)于一般的Solaris系統(tǒng)管理員來(lái)說(shuō),很少會(huì)接觸Swap(交換)空間,在他們看來(lái)Swap
區(qū)只不過(guò)是磁盤(pán)上的一兩個(gè)分區(qū)或是幾個(gè)Swap(交換)文件,當(dāng)系統(tǒng)沒(méi)有足夠的物理內(nèi)
存來(lái)處理當(dāng)前進(jìn)程的時(shí)候,就利用Swap(交換)空間作為虛擬內(nèi)存的臨時(shí)存儲(chǔ)空間,這
種說(shuō)法從技術(shù)角度來(lái)說(shuō)是沒(méi)有錯(cuò)的,但Solaris在實(shí)現(xiàn)Swap時(shí)有其非常獨(dú)特的地方。
SWAP空間作用
眾所周知,現(xiàn)代操作系統(tǒng)都實(shí)現(xiàn)了“虛擬內(nèi)存”這一技術(shù),不但在功能上突破了物理內(nèi)
存的限制,使程序可以操縱大于實(shí)際物理內(nèi)存的空間,更重要的是“虛擬內(nèi)存”是隔離
每個(gè)進(jìn)程的安全保護(hù)網(wǎng),使每個(gè)進(jìn)程不受其他程序的干擾。
Swap空間的作用可簡(jiǎn)單描述為:當(dāng)系統(tǒng)的物理內(nèi)存不夠用的時(shí)候,就需要將物理內(nèi)存中
的一部分空間釋放出來(lái),以供當(dāng)前運(yùn)行的程序使用。那些被釋放的空間可能來(lái)自一些很
長(zhǎng)時(shí)間沒(méi)有什么操作的程序,這些被釋放的空間被臨時(shí)保存到Swap空間中,等到那些程
序要運(yùn)行時(shí),再?gòu)腟wap中恢復(fù)保存的數(shù)據(jù)到內(nèi)存中。這樣,系統(tǒng)總是在物理內(nèi)存不夠時(shí)
,才進(jìn)行Swap交換。這種現(xiàn)象對(duì)于計(jì)算機(jī)使用者是經(jīng)常遇到的。
有一點(diǎn)要聲明的是,并不是所有從物理內(nèi)存中交換出來(lái)的數(shù)據(jù)都會(huì)被放到Swap中(如果
這樣的話,Swap會(huì)不堪重負(fù)),有相當(dāng)一部分的數(shù)據(jù)直接交換到文件系統(tǒng)。例如,有的
程序會(huì)打開(kāi)一些文件,對(duì)文件進(jìn)行讀寫(xiě)(其實(shí)每個(gè)程序都至少打開(kāi)一個(gè)文件,那就是運(yùn)行
程序本身),當(dāng)這些程序的內(nèi)存空間需要交換出去時(shí),文件部分的數(shù)據(jù)就沒(méi)有必要放到
Swap空間中了,如果是讀文件操作,那么內(nèi)存數(shù)據(jù)直接就釋放了,不需要交換出來(lái),因
為下次需要時(shí),直接從文件系統(tǒng)就能恢復(fù);如果是寫(xiě)文件,只需要將變化的數(shù)據(jù)保存到文
件中,以便恢復(fù)。但是那些用malloc(3C)和new函數(shù)生成的對(duì)象的數(shù)據(jù)則不同,需要
Swap空間,因?yàn)樗鼈冊(cè)谖募到y(tǒng)中沒(méi)有相應(yīng)的“儲(chǔ)備”文件,因此被稱(chēng)為“匿名”
(Anonymous)的內(nèi)存數(shù)據(jù),這類(lèi)數(shù)據(jù)還包括堆棧中的一些狀態(tài)和變量數(shù)據(jù)等,所以說(shuō),
Swap空間是“匿名”數(shù)據(jù)的交換空間。
Swap的配置對(duì)性能的影響
太多的Swap空間會(huì)浪費(fèi)磁盤(pán)的空間,而太少的Swap空間,系統(tǒng)則會(huì)發(fā)生錯(cuò)誤。
如果系統(tǒng)的物理內(nèi)存用光了,你的系統(tǒng)就會(huì)跑得慢,但仍能運(yùn)行;如果Swap空間用光了
,那么系統(tǒng)就會(huì)發(fā)生錯(cuò)誤。例如,Web服務(wù)器能根據(jù)不同的請(qǐng)求數(shù)量衍生出多個(gè)服務(wù)進(jìn)程
(或線程),如果Swap空間用完,則服務(wù)進(jìn)程無(wú)法進(jìn)動(dòng),通常會(huì)出現(xiàn)"application is
out of memory"的錯(cuò)誤,嚴(yán)重時(shí)會(huì)造成服務(wù)進(jìn)程的死鎖。因此Swap空間的分配是很重要
的。
通常情況下,Swap空間應(yīng)大于或等于物理內(nèi)存的大小,最小不應(yīng)小于64M,通常Swap空間
的大小應(yīng)是物理內(nèi)存的2-2.5倍(Solaris 2以上的版本有所變化,見(jiàn)下文)。但根據(jù)不
同的應(yīng)用,應(yīng)有不同的配置:如果是小的桌面系統(tǒng),只需要較小的Swap空間,而大的服
務(wù)器系統(tǒng)則視情況不同需要不同大小的Swap空間。特別是數(shù)據(jù)庫(kù)服務(wù)器和Web服務(wù)器會(huì)隨
著訪問(wèn)量的增加,對(duì)Swap 空間的要求也會(huì)增加,具體配置參見(jiàn)各自服務(wù)器產(chǎn)品的說(shuō)明。
另外,Swap分區(qū)的數(shù)量對(duì)性能也有很大的影響。因?yàn)镾wap交換的操作是磁盤(pán)I/O的操作,
如果有多個(gè)Swap交換區(qū),Swap空間的分配會(huì)以輪流的方式操作于所有的Swap,這樣會(huì)大
大均衡I/O的負(fù)載,加快Swap交換的速度。如果只有一個(gè)交換區(qū),所有的交換操作會(huì)使交
換區(qū)變得很忙,使系統(tǒng)大多數(shù)時(shí)間位于等待狀態(tài),效率很低,用性能監(jiān)視工具就會(huì)發(fā)現(xiàn)
,此時(shí)的CPU并不很忙,而系統(tǒng)卻慢,這說(shuō)明,瓶頸在I/O上,依靠提高CPU的速度是解決
不了問(wèn)題的。
性能監(jiān)視
Swap空間的分配固然很重要,而系統(tǒng)在運(yùn)行時(shí)的性能監(jiān)控卻更加有價(jià)值,通過(guò)性能監(jiān)視
工具可以檢查系統(tǒng)的各項(xiàng)性能指標(biāo),找到系統(tǒng)性能的瓶頸。本文只介紹一下在Solaris下
和Swap相關(guān)的一些命令和用途。
最常用的是Vmstat命令,在大多數(shù)Unix平臺(tái)下都有此命令,此命令可以查看大多數(shù)性能
的指標(biāo)。
另外使用swap -s 也能簡(jiǎn)單的查看當(dāng)前swap資源的使用情況。例如:
# swap -s
total: 65896k bytes allocated + 56840k reserved = 122736k used, 1069456k
available
能夠方便的看出swap空間的已用和未用資源的大小。應(yīng)該使Swap保持30%的負(fù)載以下,
才能保證系統(tǒng)的良好性能。
Solaris中Swap的特點(diǎn)
虛擬Swap空間
本來(lái)Swap空間就是為虛擬內(nèi)存服務(wù)的,現(xiàn)在Solaris的Swap空間也成為虛擬,這到底是
怎么回事呢? 讓我們看一個(gè)例子就明白了,當(dāng)在Solaris 2以前版本的Solaris(或其它
Unix, 如linux)上編程時(shí)經(jīng)常會(huì)出現(xiàn)一個(gè)問(wèn)題:
假設(shè)系統(tǒng)當(dāng)前還有可用的內(nèi)存空間為30M,而只剩下10M的Swap空間了,這時(shí),如果有一
個(gè)進(jìn)程開(kāi)始運(yùn)行并企圖執(zhí)行Malloc(15*1024*1024)的命令(分配15M空間),這個(gè)進(jìn)程
會(huì)因?yàn)檫@個(gè)命令而失敗。
為什么呢?系統(tǒng)不是有30M可用的內(nèi)存空間嗎?原因在于:你的Swap空間不足,系統(tǒng)認(rèn)為
你在分配空間以后,沒(méi)有能力(空間)在發(fā)生頁(yè)面交換時(shí),將這部分?jǐn)?shù)據(jù)保存起來(lái),因此
認(rèn)為你沒(méi)有資格分配這塊空間。這不是太不公平了吧!也許這15M空間根本不用交換,當(dāng)
前系統(tǒng)可是還有30M內(nèi)存空間的富余啊!
還有更不公平的呢?有些大型系統(tǒng)配備了海量的內(nèi)存,1G或4G,配了這么多內(nèi)存就是為了
避免交換,提高運(yùn)行速度,可是系統(tǒng)還要為這個(gè)系統(tǒng)分配并不需要的Swap空間,占用了
大量磁盤(pán)資源。
為了彌補(bǔ)這個(gè)缺陷,Sun為Solaris 2 以后的版本設(shè)計(jì)了虛擬Swap空間。所謂虛擬的
Swap空間,概念其實(shí)很簡(jiǎn)單,swap空間再也不是單指硬盤(pán)的分區(qū)或文件。虛擬Swap空間
包含兩個(gè)部分:部分物理內(nèi)存和傳統(tǒng)上的Swap分區(qū)。經(jīng)過(guò)適當(dāng)?shù)呐渲?,可以使系統(tǒng)需要
Swap空間時(shí),先使用內(nèi)存部分的swap空間,如果內(nèi)存部分的swap空間不夠,再使用磁盤(pán)
部分的Swap空間。這樣,也許你硬盤(pán)上的Swap空間很少得到使用了,甚至根本不需要
Swap分區(qū)。
Swap空間與TMPFS文件系統(tǒng)的關(guān)系
你知道嗎?虛擬Swap空間與 /tmp目錄有相當(dāng)大的關(guān)系。Sun在實(shí)現(xiàn)/tmp目錄時(shí),充分考
慮了應(yīng)用程序運(yùn)行的效率。許多應(yīng)用程序,特別是數(shù)據(jù)庫(kù)服務(wù)都會(huì)頻繁使用 /tmp目錄作
為臨時(shí)數(shù)據(jù)保存區(qū),而Solaris將 /tmp目錄下的文件都放在內(nèi)存中而不是硬盤(pán)里,這樣
會(huì)大大提高應(yīng)用程序的效率。 但是/tmp目錄的空間是從系統(tǒng)虛擬空間里擠出來(lái)的,是虛
擬Swap空間的一部分。如果說(shuō),你用完了/tmp空間,也就是用完了Swap空間,所以要小
心監(jiān)視系統(tǒng)的/tmp目錄的使用情況,千萬(wàn)別用光了,否則系統(tǒng)會(huì)癱瘓!下面兩點(diǎn)建議作為
參考:
1.在Mount /tmp目錄時(shí),使用(-o Size)選項(xiàng)來(lái)控制/tmp目錄的大小。
2.當(dāng)使用編譯器編譯文件時(shí),如果不想占用Swap空間,則用TMPDIR環(huán)境變量指向另外一
個(gè)臨時(shí)目錄,而不是/tmp目錄。
增加Swap空間
1.成為超級(jí)用戶 $su - root
2.創(chuàng)建Swap文件 #mkfile nnn[klblm] filename
如:#mkfile 100m swapfile1
3.激活Swap文件
#/usr/sbin/swap -a /path/filename
Swap文件必須以絕對(duì)路徑來(lái)指定,filename指的是上一步創(chuàng)建的文件。
4.現(xiàn)在新加的Swap文件已經(jīng)起作用了,但系統(tǒng)重新啟動(dòng)以后,并不會(huì)記住前幾步的操作
。因此要在/etc/vfstab文件中記錄文件的名字,和Swap類(lèi)型,如:
/path/filename - - Swap - no -
5.效驗(yàn)Swap文件是否加上 /usr/sbin/swap -l
刪除多余的Swap空間
1.成為超級(jí)用戶
2.使用swap -d 命令收回swap空間。
#/usr/sbin/swap -d /path/filename
3.編輯/etc/ufstab文件,去掉此Swap(交換)文件的實(shí)體。
4.從文件系統(tǒng)中回收此文件。
#rm swap-filename
5.當(dāng)然,如果此Swap(交換)空間不是一個(gè)文件,而是一個(gè)分區(qū),則需創(chuàng)建一個(gè)新的文件
系統(tǒng),再掛接到原來(lái)的文件系統(tǒng)上。
例子:card.263.net
增加文件系統(tǒng):在/etc/vfstab中增加
swap - /var/spool/postfix tmpfs - yes -