- 走入IBM小型機(jī)世界
- Orian編著
- 539字
- 2018-12-28 23:12:22
3.2 Paging Space,交換區(qū)
UNIX系統(tǒng)都采用虛擬內(nèi)存結(jié)構(gòu),交換區(qū)與物理內(nèi)存一起提供對(duì)虛擬內(nèi)存的支持。程序直接訪問(wèn)虛擬內(nèi)存空間(Virtual Address Space),虛擬內(nèi)存空間通過(guò)操作系統(tǒng)的虛擬內(nèi)存管理系統(tǒng)與物理內(nèi)存和交換區(qū)(就是磁盤(pán)上的一塊區(qū)域)對(duì)應(yīng)。當(dāng)程序訪問(wèn)的虛擬內(nèi)存數(shù)據(jù)不在物理內(nèi)存的時(shí)候,硬件系統(tǒng)會(huì)產(chǎn)生指令/數(shù)據(jù)訪問(wèn)中斷,該中斷調(diào)用例程將需要的數(shù)據(jù)由磁盤(pán)上的交換區(qū)調(diào)入物理內(nèi)存。
另一方面,當(dāng)物理內(nèi)存沒(méi)有足夠的空間存放執(zhí)行數(shù)據(jù)的時(shí)候,虛擬內(nèi)存管理程序執(zhí)行一種被稱(chēng)為“偷頁(yè)”的算法(UNIX中以頁(yè)為單位分配、使用內(nèi)存,AIX中每頁(yè)為4KB),依次詢(xún)問(wèn)每個(gè)內(nèi)存頁(yè)(在物理內(nèi)存中)最近有沒(méi)有被訪問(wèn)過(guò),如果該頁(yè)沒(méi)有被訪問(wèn)過(guò),就認(rèn)為該頁(yè)內(nèi)存可以釋放掉。在釋放內(nèi)存之前,還要判斷此內(nèi)存頁(yè)是計(jì)算內(nèi)存還是文件內(nèi)存,如果是計(jì)算內(nèi)存,需要先將內(nèi)存頁(yè)內(nèi)的數(shù)據(jù)保存到磁盤(pán)(交換區(qū),即交換到磁盤(pán)上,把內(nèi)存空間留給需要內(nèi)存的程序,交換區(qū)結(jié)構(gòu)如圖3-3所示),這種操作被稱(chēng)為“page out”。如果是文件內(nèi)存,就簡(jiǎn)單了,可以直接丟棄掉。關(guān)于什么是計(jì)算內(nèi)存,什么是文件內(nèi)存,我們將在下一節(jié)詳細(xì)介紹。當(dāng)系統(tǒng)需要使用的數(shù)據(jù)恰好在被交換到磁盤(pán)上的內(nèi)存頁(yè)的時(shí)候,虛擬內(nèi)存管理會(huì)產(chǎn)生一個(gè)中斷,暫停程序執(zhí)行,隨后它自動(dòng)將磁盤(pán)上的內(nèi)存頁(yè)讀回物理內(nèi)存,這就是“page in”操作。

圖3-3 交換區(qū)結(jié)構(gòu)示意圖
3.2.1 交換區(qū)多大比較合適
對(duì)于AIX系統(tǒng),傳統(tǒng)的交換區(qū)配置規(guī)則是與內(nèi)存相等或者大小是其兩倍,如果內(nèi)存很大,可以配置為與內(nèi)存的大小相等或稍小。由于目前系統(tǒng)的內(nèi)存通常配置得較大,所以交換區(qū)大小不需要再特別精確地計(jì)算,而且對(duì)系統(tǒng)的影響也幾乎可以忽略不計(jì)。通常可以根據(jù)運(yùn)行軟件的情況(參考軟件的安裝、規(guī)劃手冊(cè))進(jìn)行設(shè)置,一些數(shù)據(jù)庫(kù)和應(yīng)用程序通常需要較大的交換區(qū),例如SAP,建議配置為10~30GB的交換區(qū),如果物理內(nèi)存更多,則交換區(qū)可以配置到近100GB;而另一些則可能需要很小的交換區(qū),例如網(wǎng)絡(luò)服務(wù)程序,幾百兆字節(jié)的交換區(qū)就足夠了。
以上只是一些經(jīng)驗(yàn)值,每個(gè)系統(tǒng)交換區(qū)的最佳配置大小需要根據(jù)經(jīng)驗(yàn)現(xiàn)場(chǎng)分析,如果運(yùn)行過(guò)程中,經(jīng)常發(fā)現(xiàn)交換區(qū)使用率超過(guò)50%,建議適當(dāng)擴(kuò)大交換區(qū)大小;而如果交換區(qū)經(jīng)常只使用不超過(guò)10%,使可以適當(dāng)減少交換區(qū)空間。另外要注意,如果操作系統(tǒng)版本很低(例如4.3.3),由于不能動(dòng)態(tài)縮小交換區(qū),不要將交換區(qū)一次擴(kuò)得比較大,可以漸漸增加,但也不要過(guò)于頻繁,那樣做會(huì)產(chǎn)生很多不連續(xù)的交換區(qū)“碎塊”,從而影響性能,所以最好能2~3次就能達(dá)到一個(gè)合理的數(shù)值,以后找時(shí)間通過(guò)“磁盤(pán)整理”消除碎塊。
3.2.2 分配交換區(qū)的建議規(guī)則
建議規(guī)則是:將需要的交換區(qū)空間分成幾乎相等的幾份,分別放置在rootvg的各個(gè)硬盤(pán)上,有幾個(gè)硬盤(pán)就分幾份(可以鏡像,實(shí)際可用的份數(shù)就會(huì)少一半),但最好不要放在外置硬盤(pán)之上。例如一臺(tái)4GB內(nèi)存的主機(jī),有4塊內(nèi)置硬盤(pán),可以配置2個(gè)交換區(qū),每個(gè)大小2GB,分別放在兩個(gè)內(nèi)置硬盤(pán)上,并鏡像到另兩塊硬盤(pán)。也有不對(duì)交換區(qū)進(jìn)行鏡像的建議,這樣可以提高速度,但是如果一塊盤(pán)發(fā)生故障,可能會(huì)引起宕機(jī),需要管理員在可靠性和性能之間做出選擇。
分配交換區(qū)的命令:
#smitty pgsp Paging Space Move cursor to desired item and press Enter. List All Paging Spaces 顯示交換區(qū)大小 Add Another Paging Space 增加新交換區(qū) Change / Show Characteristics of a Paging Space更改交換區(qū)特性(例如大小) Remove a Paging Space 刪除一個(gè)交換區(qū) Activate a Paging Space 激活一個(gè)交換區(qū) Deactivate a Paging Space 停止一個(gè)交換區(qū)
3.2.3 如何縮小默認(rèn)的交換區(qū)(hd6)
縮小交換區(qū)并不困難,但是很麻煩(在AIX 5.1以后版本可以動(dòng)態(tài)刪除交換區(qū),但如果只有一個(gè)交換區(qū),還是有些問(wèn)題,因?yàn)橄到y(tǒng)要使用一個(gè)“臨時(shí)”的交換區(qū),需要額外的磁盤(pán)空間),所以盡量不要建出一個(gè)過(guò)大的交換區(qū)為好。如果已經(jīng)如此,那么:
先建一個(gè)臨時(shí)的交換區(qū)空間:mkps -s 20 -a rootvg(生成新交換區(qū)paging00)
設(shè)置下次啟動(dòng)時(shí)不使用默認(rèn)的交換區(qū)hd6:
#chps -a n hd6
編輯/sbin/rc.boot,將swapon /dev/hd6改為swapon /dev/paging00。
因?yàn)樵瓉?lái)的系統(tǒng)dump設(shè)備為/dev/hd6,在刪除原有的交換區(qū)之前,也要改到新的交換區(qū)上:
#sysdumpdev -p /dev/paging00
更新啟動(dòng)邏輯卷的信息:
#bosboot -a -d hdisk0 → 在hdisk0上重新寫(xiě)入引導(dǎo)程序 #shutdown -Fr → 重新引導(dǎo)系統(tǒng)
刪除原來(lái)的hd6,創(chuàng)建新的合適大小的交換區(qū):
#rmps hd6 #mklv -y hd6 -t paging rootvg <size of PS in PP numbers>
重新編輯/sbin/rc.boot文件,將交換區(qū)換為原來(lái)的/dev/hd6:
#swapon /dev/hd6
將dump設(shè)備改回hd6:
#sysdumpdev -p /dev/hd6
重新設(shè)置啟動(dòng)邏輯卷信息:
#bosboot -a -d hdisk0
將當(dāng)前使用的臨時(shí)交換區(qū)設(shè)置為下次啟動(dòng)不激活:
#chps -a n /dev/paging00
重啟,刪除臨時(shí)的交換區(qū):
#rmps paging00
現(xiàn)在可以檢查一下結(jié)果了:
#lsps -a
3.2.4 交換區(qū)不斷增長(zhǎng),直至100%怎么辦
如果交換區(qū)持續(xù)增長(zhǎng)則首先需要確認(rèn)交換區(qū)的大小是否足夠,如果不夠則需要增加。一般來(lái)說(shuō)交換區(qū)的分配如果合理,交換區(qū)的利用率會(huì)固定在一個(gè)穩(wěn)定的數(shù)值。如果交換區(qū)的使用率持續(xù)增長(zhǎng)至100%,則會(huì)引起新程序無(wú)法執(zhí)行,或者宕機(jī)。可能的原因是執(zhí)行了非常消耗內(nèi)存的程序或者存在內(nèi)存泄漏問(wèn)題。
用lsps -a命令可以查看交換區(qū)使用率,而當(dāng)系統(tǒng)交換區(qū)接近100%時(shí),很明顯的跡象是系統(tǒng)會(huì)有如下提示之一:
INIT: Paging space is low
ksh: cannot fork no swap space
Not enough memory
Fork function failed
fork () system call failed
Unable to fork, too many processes
Fork failure - not enough memory available
Fork function not allowed. Not enough memory available.
Cannot fork: Not enough space
此時(shí)你可能可以“眼疾手快”地通過(guò)關(guān)閉(kill)幾個(gè)不重要的程序,釋放出一些內(nèi)存,給你一些緩沖時(shí)間,擴(kuò)大交換區(qū)。但通常你沒(méi)有足夠的時(shí)間,機(jī)器馬上變得很慢,輸入任何命令都沒(méi)反應(yīng),或者提示以上某一條信息,所有需要新啟動(dòng)服務(wù)程序的服務(wù)也不能工作(例如telnet),但是往往已經(jīng)啟動(dòng)的程序還能夠正常使用,特別是啟動(dòng)后就不再繼續(xù)申請(qǐng)內(nèi)存的程序,例如Oracle。此時(shí)的唯一解決辦法就是堅(jiān)持到可以停機(jī)的時(shí)候,重新啟動(dòng)計(jì)算機(jī),或者通過(guò)其他方式,停止一些消耗內(nèi)存比較大的程序(例如通過(guò)sqlplus訪問(wèn)Oracle,將其停掉),獲得一些內(nèi)存,然后再用其他命令處理,殺掉內(nèi)存占用“大戶(hù)”。因此,如果交換區(qū)使用率經(jīng)常大幅度波動(dòng)的話,經(jīng)常查看交換區(qū)使用率非常有必要。
vmstat命令可以查看所有系統(tǒng)使用的虛擬內(nèi)存,就是vmstat中“avm”一項(xiàng)。(avm的含義是Avtive Virtual Memory,而不是availabile memory!)AVM代表了物理內(nèi)存與交換區(qū)使用的空間的總和(以4KB為單位)。如果avm一項(xiàng)在持續(xù)增長(zhǎng),就可能有內(nèi)存泄漏,此時(shí)交換區(qū)使用率也一定在增長(zhǎng)。但只用vmstat還無(wú)法定位到具體程序,不可能所有的程序都在泄漏內(nèi)存!那就需要更具體的定位方案了。
3.2.5 交換區(qū)分配策略
AIX系統(tǒng)有三種交換區(qū)分配策略。
1.Late Page Space Allocation(LPSA),交換區(qū)滯后分配策略
在AIX 4.3.2版本以前,操作系統(tǒng)默認(rèn)采用滯后分配策略。滯后分配策略是當(dāng)某個(gè)進(jìn)程申請(qǐng)內(nèi)存的同時(shí),虛擬內(nèi)存就給它分配了空間,但是只有當(dāng)這塊內(nèi)存真正需要交換到磁盤(pán)上去的時(shí)候,才將磁盤(pán)交換區(qū)上的空間與此內(nèi)存頁(yè)面相關(guān)聯(lián)。因此這種策略不能保證當(dāng)需要進(jìn)行磁盤(pán)交換的時(shí)候有足夠的交換區(qū)空間,因?yàn)榭赡苡袆e的程序“搶先”進(jìn)行磁盤(pán)交換,而占據(jù)了所有的磁盤(pán)空間交換區(qū)。
2.Early Page Space Allocation(EPSA),交換區(qū)預(yù)先分配策略
為了確保進(jìn)程不會(huì)由于缺少交換區(qū)而被“殺”掉,可以使用預(yù)先分配策略。通過(guò)設(shè)置環(huán)境變量PSALLOC為early,將使此后執(zhí)行的程序采用預(yù)先分配策略。采用預(yù)先分配策略可以確保進(jìn)程有交換區(qū)(只要進(jìn)程能夠成功申請(qǐng)內(nèi)存,磁盤(pán)上就保留出對(duì)應(yīng)的空間,并且不能共用)。如果采用了預(yù)先分配策略,并且希望節(jié)省CPU資源,可以考慮設(shè)置另一個(gè)環(huán)境變量NODISCLAIM=true,當(dāng)程序釋放內(nèi)存的時(shí)候,磁盤(pán)交換區(qū)上預(yù)留的空間并不立刻釋放,這樣可以減少部分CPU的操作。
3.Deferred Page Space Allocation(DPSA),交換區(qū)延遲分配策略
從AIX 4.3.2開(kāi)始增加了一種延遲分配策略。與滯后分配策略類(lèi)似,延遲分配策略更為“延遲”,直到需要進(jìn)行磁盤(pán)交換的時(shí)候,才在交換區(qū)空間進(jìn)行分配,所以不會(huì)發(fā)生所分配的空間被搶占的情況,但是由于需要臨時(shí)進(jìn)行空間分配,CPU計(jì)算更為復(fù)雜,對(duì)于有頻繁磁盤(pán)交換的系統(tǒng),會(huì)影響一定的性能。
只要內(nèi)存數(shù)據(jù)被交換到某塊磁盤(pán)空間,即使內(nèi)存數(shù)據(jù)被page in回內(nèi)存,磁盤(pán)空間依然保留。因此交換區(qū)使用百分比可能并不能真實(shí)反映真正實(shí)用的磁盤(pán)交換區(qū)情況(比真正使用量稍大),因?yàn)槟承┐疟P(pán)數(shù)據(jù)可能已經(jīng)被交換回內(nèi)存,只有當(dāng)使用此內(nèi)存的進(jìn)程釋放了內(nèi)存后,磁盤(pán)交換區(qū)才將分配空間釋放掉。
通過(guò)設(shè)定環(huán)境變量可以控制系統(tǒng)對(duì)于下一個(gè)執(zhí)行程序的交換區(qū)分配策略。例如執(zhí)行:
#PSALLOC=early;export PSALLOC
可以讓系統(tǒng)執(zhí)行下一個(gè)程序時(shí)采用EPSA(提前分配)策略。系統(tǒng)缺省是defer策略。
3.2.6 交換區(qū)分配問(wèn)題解釋
內(nèi)存、交換區(qū)分配中有許多概念非常令人困惑,其中一些與管理有關(guān),另一些則與性能有關(guān),而這兩大部分,都是小型機(jī)技術(shù)中的重中之重。在3.2.1節(jié)“交換區(qū)多大比較合適”一節(jié)中已經(jīng)介紹了一些關(guān)于交換區(qū)大小的經(jīng)驗(yàn),那么這些經(jīng)驗(yàn)是如何得來(lái)的呢?任何經(jīng)驗(yàn)的背后,都是有理論依據(jù)的,但可能由于沒(méi)有經(jīng)過(guò)仔細(xì)分析而不為人所知。
交換區(qū)本質(zhì)上就是保存程序、數(shù)據(jù)的空間,由于磁盤(pán)通常用于保存最終結(jié)果,而中間過(guò)渡的數(shù)據(jù),由于經(jīng)常被頻繁訪問(wèn),因此被存儲(chǔ)到內(nèi)存中,特別是很多程序并沒(méi)有自行處理臨時(shí)文件的機(jī)制,不會(huì)主動(dòng)將內(nèi)存中的數(shù)據(jù)寫(xiě)入磁盤(pán),因?yàn)檫@需要額外一套復(fù)雜的機(jī)制去處理,處理不好,還會(huì)引起嚴(yán)重的性能問(wèn)題,甚至導(dǎo)致程序故障。因此,將內(nèi)存中暫時(shí)不用的數(shù)據(jù)臨時(shí)存儲(chǔ)到硬盤(pán),當(dāng)程序需要這部分?jǐn)?shù)據(jù)的時(shí)候,再把它調(diào)回內(nèi)存中就成為操作系統(tǒng)責(zé)無(wú)旁貸的工作。對(duì)應(yīng)用程序來(lái)說(shuō),它根本不知道自己的代碼和數(shù)據(jù)在內(nèi)存和硬盤(pán)中換來(lái)?yè)Q去,而以為都是在內(nèi)存中,因此避免了編程的復(fù)雜性;多個(gè)程序都“共用”操作系統(tǒng)提供的內(nèi)存、硬盤(pán)交換功能,顯然代碼效率提高,也更容易優(yōu)化。
這就是操作系統(tǒng)的發(fā)展趨勢(shì):程序?yàn)榱藰O端的性能、效率,自己研發(fā)出某些功能,當(dāng)這些功能開(kāi)始被眾多程序普及使用后,操作系統(tǒng)就“接手”這些功能,集成到操作系統(tǒng)中,成為一項(xiàng)公用的功能,應(yīng)用程序也因此簡(jiǎn)化了許多,當(dāng)然,它又會(huì)去繼續(xù)研究其他好用的功能。邏輯卷管理、交換區(qū),甚至網(wǎng)絡(luò)通信能力都是這樣一步步從專(zhuān)用程序演化為操作系統(tǒng)的集成功能,最后甚至成為某個(gè)獨(dú)立與服務(wù)器的硬件設(shè)備(例如路由器)。
了解了交換區(qū)的歷史背景,我們就可以回歸交換區(qū)的本質(zhì)去探討交換區(qū)使用和涉及的性能問(wèn)題:交換區(qū)的大小當(dāng)然是夠用就行!太大,暫用額外的磁盤(pán)空間,浪費(fèi);太小,當(dāng)程序需要的時(shí)候,沒(méi)有足夠的虛擬內(nèi)存空間使用;同時(shí),程序所要經(jīng)常訪問(wèn)的數(shù)據(jù)容量,必須小于物理內(nèi)存數(shù)量,否則就會(huì)有嚴(yán)重的性能問(wèn)題。由于這個(gè)原因,交換區(qū)的大小設(shè)置沒(méi)有絕對(duì)的要求,需要根據(jù)應(yīng)用程序的要求進(jìn)行設(shè)置。同時(shí)要注意:所有運(yùn)行中的應(yīng)用程序“經(jīng)常”要訪問(wèn)的內(nèi)存,一定要少于真正的物理內(nèi)存數(shù)量,盡管對(duì)于程序來(lái)說(shuō),它自己分不出交換區(qū)和物理內(nèi)存,而性能卻差很多,例如幾十倍的差距!
不同程序特性決定了系統(tǒng)配置交換區(qū)的大小需求。如果程序一次性申請(qǐng)內(nèi)存,并且很少再額外申請(qǐng)內(nèi)存(例如Oracle數(shù)據(jù)庫(kù)),則交換區(qū)并不重要,只要確保指定分配給此程序需要的內(nèi)存少于物理內(nèi)存(一般少于80%的物理內(nèi)存)就可以了;但是如果此程序要求的內(nèi)存非常大,或者經(jīng)常進(jìn)行申請(qǐng)/釋放內(nèi)存操作,則交換區(qū)就需要適當(dāng)增大,具體大小一般根據(jù)程序的需求來(lái)定;還有一種類(lèi)型的程序?qū)儆陂L(zhǎng)時(shí)間運(yùn)行,需要訪問(wèn)大量的數(shù)據(jù),但訪問(wèn)很不集中,就是大部分時(shí)間都在閑置或一段時(shí)間內(nèi)僅需要一小塊數(shù)據(jù)(如SAP應(yīng)用),這樣內(nèi)存中長(zhǎng)時(shí)間不使用的數(shù)據(jù)會(huì)需要從內(nèi)存中轉(zhuǎn)儲(chǔ)到交換區(qū),也需要比較大的交換區(qū)。
如果你并不清楚程序的特性,可以在一段時(shí)間對(duì)程序進(jìn)行“監(jiān)視”,觀察程序的內(nèi)存使用情況,最終設(shè)定一個(gè)合適的內(nèi)存交換區(qū)大小。
- 大數(shù)據(jù)戰(zhàn)爭(zhēng):人工智能時(shí)代不能不說(shuō)的事
- 機(jī)器人智能運(yùn)動(dòng)規(guī)劃技術(shù)
- 工業(yè)機(jī)器人工程應(yīng)用虛擬仿真教程:MotoSim EG-VRC
- 分析力!專(zhuān)業(yè)Excel的制作與分析實(shí)用法則
- Mastering Ceph
- 生物3D打印:從醫(yī)療輔具制造到細(xì)胞打印
- Python文本分析
- 計(jì)算機(jī)應(yīng)用基礎(chǔ)實(shí)訓(xùn)(職業(yè)模塊)
- 電氣控制及Micro800 PLC程序設(shè)計(jì)
- 天才與算法:人腦與AI的數(shù)學(xué)思維
- 時(shí)序大數(shù)據(jù)平臺(tái)TDengine核心原理與實(shí)戰(zhàn)
- 單片機(jī)數(shù)據(jù)通信及測(cè)控應(yīng)用技術(shù)詳解
- 工業(yè)機(jī)器人技術(shù)基礎(chǔ)
- IBM主機(jī)技術(shù)一本通
- 開(kāi)源硬件+激光切割創(chuàng)新電子制作