轉(zhuǎn)自:http://www.it./PcTech-34683.html 本文先介紹一下各種WEB服務(wù)器平臺,然后對影響WEB服務(wù)器性能的各方面做了分析,,最后解析了目前使用最普遍的Apache服務(wù)器在服務(wù)請求高峰時(shí)的響應(yīng)延遲現(xiàn)象 在上周的一篇文章里,,我們介紹了搭建WEB服務(wù)器的方法,但這只是建立WEB服務(wù)器的第一步,,在實(shí)際的站點(diǎn)運(yùn)行中,,也許服務(wù)器的性能表現(xiàn)會不 盡如人意,這就需要分析具體的服務(wù)器性能瓶頸并找到解決辦法,。本文先介紹一下各種WEB服務(wù)器平臺,,然后對影響WEB服務(wù)器性能的各方面做了分析,,最后解 析了目前使用最普遍的Apache服務(wù)器在服務(wù)請求高峰時(shí)的響應(yīng)延遲現(xiàn)象,希望能對WEB服務(wù)器性能瓶頸的分析有所幫助,。 對于互聯(lián)網(wǎng)上的web平臺,,究竟有多少種不同的軟硬件組合方式?你肯定會對這個(gè)數(shù)字感到吃驚,。從配置了最新版本的IIS(Internet Information Server,,因特網(wǎng)信息服務(wù)器)的WindowsXP系統(tǒng)到運(yùn)行在Apache服務(wù)器上“古老”的SunOS 4.x系統(tǒng),真是數(shù)之不盡,。當(dāng)然,,最流行的幾種平臺也就那么幾種。Windows NT類(尤其是同時(shí)配置了IIS和SQL Server的系統(tǒng))是近來很常見的web平臺,。同時(shí),,運(yùn)行在SUN公司SPARC工作站上的Solaris(安裝了Netscape公司企業(yè)版的 Webserver)和免費(fèi)的Apache服務(wù)器系統(tǒng)也比較常見。此外,,令人相當(dāng)吃驚的是,,Linux和FreeBSD這兩款開放源代碼的頂級操作系統(tǒng)對 上述幾類平臺構(gòu)成了巨大的威脅。正在改變服務(wù)器操作系統(tǒng)的分布格局,。 為什么很多人選擇Windows NT/2000/XP,? 先撇開卓越的運(yùn)行穩(wěn)定性、系統(tǒng)正常穩(wěn)定運(yùn)行時(shí)間或表現(xiàn)等不論,,Windows NT類操作系統(tǒng)在服務(wù)器應(yīng)用環(huán)境領(lǐng)域占據(jù)的市場份額以驚人的速度持續(xù)快速增長,,原因主要是,它具有非常體貼用戶的易操作性及出類拔萃的開發(fā)工具,。 很多剛進(jìn)入IT領(lǐng)域的用戶非常喜歡Windows的這種“平民化”的界面,,因?yàn)樗鼧O大地簡化了日常的管理工作。對于開發(fā)人員來說,,則因 Microsoft提供的目前最完整,、最有效率的開發(fā)環(huán)境,而從NT系統(tǒng)中獲益不小,。類似InterDev的一些開發(fā)工具與Visual Source Safe(在龐大的工程中對軟件版本進(jìn)行管理)結(jié)合使用,,能輕松地削減開發(fā)人員的開發(fā)時(shí)間。 為什么有的人不選擇Windows NT,? Windows NT畢竟仍屬Windows家族的一員,,也存在眾多該系列操作系統(tǒng)所遭遇的問題,從而影響到一些運(yùn)算量大,、資源消耗多的應(yīng)用程序的穩(wěn)定性和可執(zhí)行性,。 Windows NT 4采用的是一個(gè)靜態(tài)的內(nèi)核,這就使得即使是執(zhí)行一些非常簡單的任務(wù),,比如裝載一個(gè)新的驅(qū)動器,,也必須重啟機(jī)器,。此外,和UNIX 相較而言,,Windows NT還缺少大量的遠(yuǎn)程管理手段,。不過,隨著微軟新版的服務(wù)器操作系統(tǒng)2000/XP的發(fā)布,這些問題正在得到解決,最新的WindwoXP服務(wù)器版可以說 是一個(gè)不錯(cuò)的服務(wù)器操作系統(tǒng)。 關(guān)于Solaris Solaris是UNIX操作系統(tǒng)在市場上最流行的一種變體,?;ヂ?lián)網(wǎng)上大部分站點(diǎn)都采用Solaris提供web服務(wù)。在UNIX所有不同的 變體中,,Solaris擁有最大的用戶群體,,相應(yīng)地,它也是利潤最豐厚的一款軟件,。各種應(yīng)用服務(wù)器和應(yīng)用環(huán)境專為Solaris設(shè)計(jì)的版本,,比如 ColdFusion(普遍使用在Windows NT上)均已推出。Solaris系統(tǒng)能夠提供真實(shí)的企業(yè)級可靠性和高性能,,其他平臺很難與之媲美。與Windows NT不同的是,,當(dāng)你給系統(tǒng)添加額外的硬盤時(shí),,并不需要將Solaris系統(tǒng)重啟。另外,,在Sun公司更大型的企業(yè)級服務(wù)器上,,你甚至能夠在不關(guān)機(jī)的情況 下,更換內(nèi)存條和CPU,。與眾多平臺相比,,Solaris還能提供最佳的多重處理(multiprocessing)性能。 為什么有人不愿意選擇Solaris,? 好了,,為了公平起見,我來說說人們不選擇Solaris的原因,。先要指出的是,,基于Intel芯片的Solaris平臺不等同基于SPARC 芯片的Solaris平臺。盡管Intel芯片版本的Solaris系統(tǒng)擁有與SPARC芯片版本一樣的高可靠性,,但用于前者的商用軟件的數(shù)量明顯不如后 者多,,同時(shí),由于硬件上的一些限制,,Solaris系統(tǒng)的一些相對高級的特性(比如CPU或內(nèi)存的熱插拔升級)在Intel芯片版本中無法實(shí)現(xiàn),。前段時(shí)間 甚至有消息說最新的Solaris將不再支持Intel平臺,這對采用Intel硬件平臺的用戶可說是一種遺憾,。 選擇Linux還是FressBSD,? 開放源代碼操作系統(tǒng)(如Linux,、FreeBSD)在市場上搶占著越來越大的市場份額,人們對這類系統(tǒng)的總體接受程度也開始以驚人的速度增 長,。幾年前,,只有少數(shù)幾家公司知道Linux到底是什么,但是目前它已被業(yè)界幾乎每一個(gè)專業(yè)用戶所大力推崇,。舉個(gè)例子,,你可以在市場上買到更多的基于 Linux平臺的商業(yè)軟件,如Oracle,、Sybase等等,。 同時(shí),F(xiàn)reeBSD也取得了相當(dāng)一部分商業(yè)支持,,其中一些是由于Linux流行的原因而帶來的,。很多大型網(wǎng)站,比如Yahoo,,跑的都是 FreeBSD平臺,。FreeBSD和Linux之間的兼容性問題很小。因此,,我們會發(fā)現(xiàn),,這兩款操作系統(tǒng)的用戶群體將同步持續(xù)增長。 不幸的是,,很多使用開放源代碼操作系統(tǒng)的用戶由于不希望繳納相關(guān)的成本費(fèi)用,,實(shí)際上在抵制使用Linux平臺上的商業(yè)軟件。從某個(gè)角度來看,, 仿佛是因?yàn)檫@些用戶由于習(xí)慣了Linux系統(tǒng)免費(fèi)使用的做法,,而不愿意為服務(wù)器的其他應(yīng)用付費(fèi)。從目前情況看,,這已對市場產(chǎn)生了激冷效應(yīng),。我估計(jì),隨著越 來越多基于該平臺的軟件發(fā)布,,這種情況將會更加惡化,。 這主要是因?yàn)長inux操作系統(tǒng)大多是被小公司和個(gè)人所選用,而這類群體實(shí)際上根本買不起企業(yè)級的商業(yè)軟件,。這種狀況只有在opensource操作系統(tǒng)的技術(shù)和市場成熟壯大起來,,并被更多的大公司(他們往往擁有更大的需求)接納之后才會逐漸改變。 在互聯(lián)網(wǎng)上,,對開放源碼操作系統(tǒng)支持的呼聲很高,,但是,人們對這類平臺學(xué)習(xí)和理解的難度比Windows,甚或是Solaris要大得多,。另 外,,所有的這類軟件均處在一個(gè)快速發(fā)展的過程中。所以,,你在尋找你需要的東西的時(shí)候,,也許總會不經(jīng)意地發(fā)現(xiàn)系統(tǒng)的一些小bug(錯(cuò)誤的計(jì)算機(jī)程序代碼或例 行程序上的瑕疵)及不完整的軟件包。 對于那些WEB服務(wù)需求小,,硬件資源緊張的小公司來說,,他們一般更愿意采用一款開放源碼操作系統(tǒng)(而不采用商業(yè)解決方案)。而對于缺少經(jīng)驗(yàn)的 公司來說,,他們則傾向選擇安全可靠的Windows解決方案,。那些對Web 發(fā)布需求巨大,同時(shí)要求系統(tǒng)正常運(yùn)行時(shí)間比率超過99%或以上的公司也許會選擇Solaris平臺,。因?yàn)閛laris的穩(wěn)定性可以為滿足這種苛刻的運(yùn)行要 求提供更大保障,。 一臺提供web發(fā)布服務(wù)的服務(wù)器與其他大多數(shù)的常規(guī)主機(jī)相比較,被更寬泛的負(fù)載狀態(tài)(load conditions)所影響,。事實(shí)上,,一個(gè)web站點(diǎn)里能夠容納大量各種各樣的內(nèi)容,即使是其中一個(gè)簡單的HTTP服務(wù)器(軟件意義上的服務(wù)器),,其負(fù) 載也遠(yuǎn)遠(yuǎn)超出了HTTP協(xié)議設(shè)計(jì)者當(dāng)初所能預(yù)料的范圍,。 實(shí)際上,目前的web站點(diǎn)能夠采用各種技術(shù),,包括靜態(tài)HTML、內(nèi)嵌或服務(wù)器解析的HTML(inline/server-parsed HTML)和CGI(Common Gateway Interface,,公共網(wǎng)關(guān)接口),,并以O(shè)DBC(Open Database Connectivity,開放式數(shù)據(jù)庫互接)實(shí)現(xiàn)數(shù)據(jù)庫的互連,。這些不同的數(shù)據(jù)源中有一部分非常普通,,而其余部分卻并非如此。不管如何,,每一種數(shù)據(jù)源均 以其獨(dú)特的方式在web服務(wù)中發(fā)揮著作用,。在決定你的站點(diǎn)到底適合采用哪種服務(wù)器之前,你應(yīng)該明確一下,,你的需求究竟是什么,。 靜態(tài)HTML 這是互聯(lián)網(wǎng)上任何站點(diǎn)最基本的一種構(gòu)成“元素”。盡管真正意義上完全采用靜態(tài)HTML來搭建的站點(diǎn)數(shù)量越來越少,,但是,,幾乎所有的站點(diǎn)均不同 程度地采用了這種“元素”。靜態(tài)的HTML頁面嚴(yán)格地由標(biāo)準(zhǔn)的HTML標(biāo)示語言構(gòu)成,,并不需要服務(wù)器端即時(shí)運(yùn)算生成,。這意味著,,對一個(gè)靜態(tài)HTML文檔發(fā) 出訪問請求后,服務(wù)器端只是簡單地將該文檔傳輸?shù)娇蛻舳?。從服?wù)器運(yùn)行的那個(gè)時(shí)間片來看,,這個(gè)傳輸過程僅僅占用了很小的CPU資源。為了提高靜態(tài)HTML 的訪問效率,,主要可以對以下幾個(gè)方面進(jìn)行優(yōu)化:網(wǎng)絡(luò)帶寬,、磁盤I/O以及cache(高速緩沖存儲器)。 服務(wù)器解析的HTML 依靠服務(wù)器解析的HTML頁面包括兩部分的代碼,,一是標(biāo)準(zhǔn)的HTML代碼,,二是服務(wù)器端運(yùn)行的代碼(由第三方的處理程序或web服務(wù)器自己在 頁面?zhèn)鬏數(shù)娇蛻舳饲皩ζ溥M(jìn)行解釋)。這種HTML頁面是CGI程序的升級版本(因?yàn)樗膱?zhí)行效率更高),。目前,,內(nèi)嵌的服務(wù)器端擴(kuò)展集,比如ASP,、 PHP3,,甚或是普通的服務(wù)器端支持的擴(kuò)展集,已得到了非常普遍的使用,。開發(fā)這種擴(kuò)展集的目的是要使網(wǎng)站上的內(nèi)容更生動活潑,,更模塊化,以利于維護(hù),。此 外,,服務(wù)器解析文檔改善了性能相對低下的客戶端工作模式,將客戶端的負(fù)載降低到最低程度,,同時(shí)也降低了數(shù)據(jù)傳輸對帶寬的要求,。很顯然,你要得到這一切,,就 必須付出金錢的代價(jià),。因?yàn)榉?wù)器解析文檔必須在其傳輸?shù)娇蛻舳饲熬屯ㄟ^服務(wù)器來進(jìn)行解釋,所以,,你要給你的服務(wù)器添加額外的CPU,。 公共網(wǎng)關(guān)接口(CGI) CGI使Web站點(diǎn)具有更佳的交互性和實(shí)用性。它可以用來收集用戶的輸入數(shù)據(jù),,允許運(yùn)行外部程序以執(zhí)行眾多與用戶輸入相關(guān)的任務(wù)以及輸出執(zhí)行 結(jié)果等,,因此,應(yīng)用CGI后,,互聯(lián)網(wǎng)的用途被大大擴(kuò)充了,。但是,要使用CGI,就必須付出一定開銷,。特別在CGI與解釋器(譬如PERL)配合使用 時(shí),,CGI的調(diào)用成本會很高。如果您的系統(tǒng)運(yùn)行在極端繁重的負(fù)載條件下,,該成本更是高居不下,。如果可能的話,您應(yīng)該考慮選用ASP或PHP3來取代 CGI,。 數(shù)據(jù)庫的互連性 目前,,互聯(lián)網(wǎng)上最大的資源殺手當(dāng)非在線數(shù)據(jù)庫(online databases)和電子商務(wù)(e-commerce)等應(yīng)用莫屬。提供web功能的數(shù)據(jù)庫和應(yīng)用服務(wù)器近年來飛速增長,,顯示出強(qiáng)勁的發(fā)展勢頭,。從性能 的角度來看,在線數(shù)據(jù)庫(基于Oracle,、 SQL Server或 Sybase等)及應(yīng)用如日中升,,迫使人們更加關(guān)注服務(wù)器的性能狀況。對于大型網(wǎng)站來說,,高負(fù)載的HTTP傳輸和數(shù)據(jù)庫處理事務(wù)互相搶占資源,,并最終可能 導(dǎo)致服務(wù)器在極短的時(shí)間內(nèi)崩潰或者變得慢如蝸牛。在這種情況下,,推薦您使用專門的后臺運(yùn)行的數(shù)據(jù)庫服務(wù)器(當(dāng)然也是出于安全的考慮)以及前臺處理的 HTTP服務(wù)器,。 眾所周知,究竟選用哪種不同類型的傳輸介質(zhì),必須根據(jù)預(yù)期的負(fù)載類型來決定。因此,從這點(diǎn)來看,你應(yīng)該可以粗略地決定究竟需要采用哪種硬件,。 盡管不同的平臺提供不同的性能水平,各個(gè)平臺的性能之間還是存在一定交迭的,因此,,你可以在對需要采用多少數(shù)量的硬件作任何決定之前,初步選擇一下那些你 使用起來最覺舒適的平臺,。 下文將那些與特定網(wǎng)站(這類網(wǎng)站一般只采用標(biāo)準(zhǔn)的傳輸介質(zhì)和內(nèi)容類型,,如靜態(tài)HTML、服務(wù)器解析文檔以及從少量到數(shù)量適中的CGI程序)相關(guān)聯(lián)的瓶頸根據(jù)其對系統(tǒng)的影響程度逐個(gè)列出,。 網(wǎng)絡(luò)帶寬 吞吐量及高峰傳輸速率或突發(fā)傳輸速率(Spikes/Burst Transfer Rates) 內(nèi)存 Webserver客戶端和文件系統(tǒng)緩沖區(qū)(Filesystem Cache)占用的活動內(nèi)存 存儲 訪問時(shí)間,,跨多硬盤訪問的效率 中央處理器 在多進(jìn)程或多線程環(huán)境下的性能 網(wǎng)絡(luò)帶寬 可用的帶寬對于那些主要由靜態(tài)頁面構(gòu)成的站點(diǎn)來說,也許是最關(guān)鍵的因素,,但問題往往并不如你想象的那么簡單,。撇開網(wǎng)絡(luò)的吞吐總量以及響應(yīng)速度 不講,在高負(fù)載的環(huán)境下,系統(tǒng)的突發(fā)傳輸速率是非常重要的,。盡管通過單一的T1或T3傳輸速率提供的總帶寬對一個(gè)特定的站點(diǎn)而言也許綽綽有余,,但其最大的 傳輸速率(T1下為1.5mbit/s,T3下為4.5mbit/s)也可能不足以應(yīng)付系統(tǒng)的高峰傳輸負(fù)載,。在用戶訪問的高峰期,,某些站點(diǎn)也許根本無法訪 問。這樣的站點(diǎn)在用戶企圖訪問它時(shí)顯得慢如蝸牛,,而服務(wù)器自身卻仍舊非??臻e。這樣看來,,要成功搭建一個(gè)web主機(jī),,考慮清楚你到底需要多大的帶寬顯然是 非常重要的。 內(nèi)存 可用的物理內(nèi)存是另外一個(gè)重要因素,,這是因?yàn)閷?nèi)存的占用率會直接隨著對服務(wù)器請求數(shù)量的增加而增加,。計(jì)算分配給每個(gè)并發(fā)用戶的內(nèi)存數(shù)量以及 并發(fā)用戶的平均數(shù)量,只是你要考慮的事情中的一部分,。文件緩沖區(qū)也是非常重要的,,因?yàn)樗軐⒋疟P的使用頻率降到最低程度,明顯加快事務(wù)處理的總體速度,。 對內(nèi)存的需求很大程度上取決于使用在特定服務(wù)器上的軟件的具體情況,。除了操作系統(tǒng)的管理能力和文件系統(tǒng)的緩沖區(qū)大小之外,你還需要將你所選擇的web服務(wù)器軟件對硬件的特殊要求調(diào)查清楚,。 存儲 和存儲介質(zhì)有關(guān)的讀寫時(shí)間指標(biāo)也是非常重要的,,對大型文件庫和數(shù)據(jù)庫(文件緩沖區(qū)的作用在這明顯削弱)而言,尤其如此,。在多設(shè)備協(xié)同工作的條 件下,,Web服務(wù)器的磁盤系統(tǒng)必須有卓越的性能,推薦采用SCSI硬盤或RAID陣列,。對于那些主要放開了“只讀”權(quán)限的站點(diǎn)(用戶不能上傳數(shù) 據(jù)),,RAID是最佳的解決方案。這是因?yàn)?,在RAID陣列中存在多個(gè)硬盤磁頭,,能明顯提升讀取操作的數(shù)據(jù)吞吐量。 中央處理器 對于那些主要由靜態(tài)頁面構(gòu)成的站點(diǎn)來說,,CPU只是你需要考慮的最次要的一個(gè)因素,。這是因?yàn)椋幢闶且粋€(gè)非常低端的PC電腦也能充分發(fā)掘T1 通道的傳輸速率,。但是,,在使用了包括CGI,、服務(wù)器解析文檔或提供web訪問方式的數(shù)據(jù)庫的情況下,你需要更多地關(guān)注CPU的性能,。在這種場合下,,將事務(wù) 處理速度和并發(fā)處理性能兩個(gè)概念分清楚是很重要的。如果你需要向一個(gè)較小的用戶群體提供某種對CPU依賴很大的應(yīng)用服務(wù),,那么,,一個(gè)高速的單CPU可能是 最有用的。但是,,如果存在多個(gè)用戶同時(shí)對大批量的頁面提出訪問請求,,那么在這種情況下(尤其在這些頁面均以獨(dú)立的進(jìn)程或線程模式打開情況下),多CPU系 統(tǒng)(即使這些CPU的速度都很慢)也許更為管用,。 分析服務(wù)器的工作模式 盡管在市場上可以購買到各式各樣的Web服務(wù)器,,但如果單就并發(fā)訪問的處理方式來看,所有的服務(wù)器大體可以分成基本的四類,。 Single-threaded模式(單線程模式) 非常有效,,可充分提高資源效率(對稱多處理機(jī)除外) Fork模式(分叉模式) 每個(gè)請求的成本高,性能差,,有良好的對稱多處理特性 Pre-Fork模式(預(yù)分叉模式) 良好的對稱多處理特性,,響應(yīng)速度通常比較快 Threaded模式(線程模式) 效率高的多處理特性,響應(yīng)快 Single-Threaded模式 single-threaded服務(wù)器通常采用選擇的方法在單個(gè)進(jìn)程中處理所有的訪問請求,。對只配置了一個(gè)處理器的機(jī)器來說,,這類服務(wù)器是非常高效的。但是,,它并不能通過增加額外的處理器來相應(yīng)地提升性能,。 在這次模擬測試中,我們在y軸標(biāo)注的請求數(shù)量最大值為100條/秒,,這是為了方便評估single-threaded模式下的性能,。模擬的服 務(wù)器每秒處理的請求數(shù)量維持在70條,即便如此,,這已和實(shí)際使用情況非常相近,。我們發(fā)現(xiàn),在該環(huán)境下,,當(dāng)處理較輕的負(fù)載時(shí),,single- threaded模式是非常高效的,響應(yīng)速度也非常迅捷,。隨著負(fù)載的增加,我們又發(fā)現(xiàn),,服務(wù)器的性能表現(xiàn)每況愈下,,這種狀況只能通過搭配更好的硬件才能改 善,。 Fork模式 通常來說,通過追加進(jìn)程來處理每個(gè)請求的服務(wù)器由于多了一個(gè)增加新進(jìn)程的環(huán)節(jié),,效率比較低下,,響應(yīng)速度也比較慢。由于通過這種方式在應(yīng)付大批量的客戶端請求時(shí)會過多地消耗資源,,顯然,,隨著請求數(shù)量和頻率的增加,系統(tǒng)的性能將逐步下降,。 fork模式下的測試結(jié)果和single-threaded模式下的測試結(jié)果非常相似,。不同的是,由于每一個(gè)新進(jìn)程的成本較高,,相對于single-threaded服務(wù)器來說,,這種模式下的管理維護(hù)成本會隨著http服務(wù)器進(jìn)程的增加而增加。 Pre-Fork模式 pre-fork服務(wù)器和fork服務(wù)器相似,,也是通過一個(gè)單獨(dú)的進(jìn)程來處理每條請求,。但是,不同的是,,pre-fork服務(wù)器會通過預(yù)先開 啟大量的進(jìn)程,,等待并處理接到的請求。由于采用了這種方式來開啟進(jìn)程,,服務(wù)器并不需要等待新的進(jìn)程啟動而消耗時(shí)間,,因而能夠以更快的速度應(yīng)付多用戶請求。 另外,,pre-fork服務(wù)器在遇到極大的高峰負(fù)載時(shí)仍能保持良好的性能狀態(tài),。這是因?yàn)椴还苁裁磿r(shí)候,只要預(yù)先設(shè)定的所有進(jìn)程都已被用來處理請求時(shí),,服務(wù) 器仍可追加額外的進(jìn)程,。 pre-fork服務(wù)器相當(dāng)獨(dú)特的運(yùn)行狀態(tài)曲線。和先前提到的fork模式類似的是,,pre-fork服務(wù)器也是通過獨(dú)立的http服務(wù)器進(jìn) 程來處理每一個(gè)請求,,但是,和fork服務(wù)器不同的是,,pre-fork服務(wù)器會隨著請求數(shù)量的增加而啟動若干新的進(jìn)程,。這種方法的優(yōu)點(diǎn)是,能在對 http通訊保持一定響應(yīng)能力的同時(shí),,給服務(wù)器提供少許的“喘息”時(shí)間,。缺點(diǎn)是,當(dāng)遇到高峰負(fù)載時(shí),,由于要啟動新的服務(wù)器進(jìn)程,,不可避免地會帶來響應(yīng)的延 遲,。 Threaded模式 threaded服務(wù)器和http服務(wù)器(對每一請求都必須生成新的進(jìn)程來處理)有些類似。但是,,它由于采用了線程技術(shù),,一般能以更低的管理成本取得用進(jìn)程來處理請求的效果。 threaded服務(wù)器和通過生成新的進(jìn)程來處理請求的服務(wù)器差別不大,,只是它生成的是線程而不是進(jìn)程,,因此,它對資源的依賴性也比較小,。 目前世界上最流行的Web服務(wù)器非Apache莫屬,。它采用的是Pre-Fork模式。讓我們看看它是怎么工作的,。 Apache的Pre-Fork服務(wù)器設(shè)計(jì)的原理是:當(dāng)閑置的服務(wù)器進(jìn)程數(shù)量小于用戶預(yù)設(shè)的閥值時(shí)就啟動額外的進(jìn)程,。另一用戶設(shè)定的變量則決定空閑的服務(wù)器進(jìn)程的最大數(shù)量,同時(shí),,如果實(shí)際閑置的進(jìn)程數(shù)量超過這個(gè)最大值,,服務(wù)器就會將空閑的進(jìn)程關(guān)閉。 為了順利完成以下的模擬測試,,我們先假定以下幾個(gè)條件: 1,、空閑的服務(wù)器進(jìn)程數(shù)量的最小值為5 2、空閑的服務(wù)器進(jìn)程數(shù)量的最大值為10 3,、服務(wù)器進(jìn)程數(shù)量的初始值為5 當(dāng)Pre-Fork服務(wù)器在一個(gè)“無限機(jī)”上的運(yùn)行狀態(tài)(這臺機(jī)器擁有無窮大的物理內(nèi)存和CPU時(shí)間,,我們姑且假定它是真實(shí)存在的)。 Pre-Fork 服務(wù)器在遇到高峰負(fù)載時(shí)產(chǎn)生的“步階”(stair-step)效應(yīng),。實(shí)際上,,在這種情況下,由于之前假定Pre-Fork服務(wù)器擁有無限的資源,,所以它 的性能表現(xiàn)非常令人滿意,。但是,隨著時(shí)間的推移,,實(shí)際性能卻能通過修改基于平均負(fù)載活動的服務(wù)器進(jìn)程數(shù)量的最大和最小值而發(fā)生變化,。 當(dāng)然,這臺擁有無限資源的機(jī)器顯然是不存在的,,因此,,讓我們在做一個(gè)比較真實(shí)一些的模擬測試。這次,,我們要把物理內(nèi)存的使用情況考慮進(jìn)去,。姑且作以下假定: 1、空閑的服務(wù)器進(jìn)程數(shù)量的最小值為5 2,、空閑的服務(wù)器進(jìn)程數(shù)量的最大值為10 3,、服務(wù)器進(jìn)程數(shù)量的初始值為5 4,、這臺機(jī)器配置了256 MB的物理內(nèi)存。將操作系統(tǒng)和文件系統(tǒng)緩沖區(qū)因素考慮進(jìn)去的話,,我們假定其中有196MB的內(nèi)存單獨(dú)供web服務(wù)器使用。 5,、每一web服務(wù)器進(jìn)程消耗1.5 MB的物理內(nèi)存 6,、不考慮CPU和硬盤因素,同時(shí),,我們假定一旦機(jī)器的內(nèi)存耗竭,,就無法再處理額外的訪問請求。 這次測試表明,,在機(jī)器所有物理內(nèi)存被龐大的高峰負(fù)載消耗殆盡之前,,我們這臺更真實(shí)的服務(wù)器的性能表現(xiàn)和那臺擁有無限資源的理想服務(wù)器是完全一 樣的??捎玫奈锢韮?nèi)存數(shù)量(單位:MB)用紅線在圖中標(biāo)示,,并發(fā)請求數(shù)量達(dá)到130條時(shí),內(nèi)存就被耗光,。這使得320個(gè)請求處于未響應(yīng)狀態(tài),。如果我們將 CPU的使用率和磁盤活動等因素考慮進(jìn)去的話,這些數(shù)字將會更小,,機(jī)器為應(yīng)付缺少可用內(nèi)存的狀況而忙于將數(shù)據(jù)在內(nèi)存與硬盤之間交換,,這顯然會降低系統(tǒng)的性 能。 正如你所知道的,,影響web服務(wù)器性能的因素?cái)?shù)之不盡,,要限制這些因素發(fā)揮作用,只能充分發(fā)揮人們的創(chuàng)造性思維,。用來發(fā)布不同類型頁面的 Web系統(tǒng)對硬件的要求也是不一樣的,。本文只是粗略地介紹了搭建一個(gè)Web服務(wù)器要考慮的因素,我希望它能幫助你更好地去理解這些系統(tǒng)要求,。在這個(gè)基礎(chǔ)之 上,,今后,我們還將發(fā)表一些文章,,介紹一下在Web服務(wù)器環(huán)境下的Athlon系統(tǒng),、對稱多處理(SMP)系統(tǒng)以及它們在Web環(huán)境下的性能表現(xiàn)。 分類: Web Server |
|