J2EE運(yùn)行環(huán)境性能大優(yōu)化
J2EE即Java 2企業(yè)版,或Java 2 Enterprise Edition,最近幾年已經(jīng)躍升成為幾個(gè)響當(dāng)當(dāng)?shù)募夹g(shù)縮寫(xiě)詞之一。雖然有許多人樂(lè)意談?wù)揓2EE,但真正能夠勝任J2EE開(kāi)發(fā)的人不是很多,善于開(kāi)發(fā)J2EE應(yīng)用的人就更少了。J2EE本身是一系列規(guī)范的集合,涉及諸多技術(shù),除了包括人們熟知的Servlet、JSP之外,還包括EJB以及支持構(gòu)建企業(yè)應(yīng)用的整個(gè)基礎(chǔ)設(shè)施。當(dāng)前已經(jīng)有不少實(shí)現(xiàn)了J2EE規(guī)范的應(yīng)用服務(wù)器產(chǎn)品,其中包括:
◆ BEA WebLogic
◆ IBM WebSphere
◆ Oracle Application Server
◆ JBoss
和其他技術(shù)一樣,對(duì)于J2EE來(lái)說(shuō),構(gòu)建一個(gè)健壯的、可伸縮的應(yīng)用并保證其運(yùn)行在最佳狀態(tài)是一門(mén)藝術(shù),優(yōu)化應(yīng)用的運(yùn)行環(huán)境也是一門(mén)藝術(shù)。掌握這門(mén)藝術(shù)的關(guān)鍵在于分析應(yīng)用及其運(yùn)行基礎(chǔ)設(shè)置,同時(shí)還要求深入觀(guān)察應(yīng)用的運(yùn)行情況。
這個(gè)系列的文章主要探討J2EE應(yīng)用和應(yīng)用服務(wù)器的性能優(yōu)化問(wèn)題。本文首先介紹性能優(yōu)化的基本概念,介紹性能優(yōu)化對(duì)于J2EE應(yīng)用的意義,闡述J2EE環(huán)境中可優(yōu)化的性能因素。
一、什么是性能優(yōu)化
在深入探討J2EE應(yīng)用以及它下面的應(yīng)用服務(wù)器的優(yōu)化問(wèn)題之前,首先我們要搞清楚性能優(yōu)化到底是什么,因?yàn)樵诓煌膱?chǎng)合性能優(yōu)化這一概念有著不同的含義。就本文的討論而言,性能優(yōu)化的目標(biāo)就是提高下面幾個(gè)指標(biāo):并發(fā)用戶(hù)數(shù)量,吞吐量,可靠性。
換句話(huà)說(shuō),我們希望讓?xiě)?yīng)用更快地為更多的用戶(hù)提供服務(wù),且保證服務(wù)過(guò)程不會(huì)中斷。

當(dāng)一個(gè)應(yīng)用的性能未能滿(mǎn)足要求,應(yīng)當(dāng)從哪里入手改善其性能?怎樣的情況下才必須增加硬件設(shè)施?如何通過(guò)調(diào)整幾個(gè)應(yīng)用服務(wù)器的參數(shù),獲得比添加硬件設(shè)備更好的性能效果?這些問(wèn)題都是實(shí)踐中經(jīng)常會(huì)遇到的問(wèn)題,但遺憾的是,許多單位在看到應(yīng)用的性能未能滿(mǎn)足要求時(shí),首先考慮的就是增加硬件設(shè)備。增加硬件設(shè)備無(wú)疑會(huì)提高應(yīng)用的性能表現(xiàn),但同時(shí)也會(huì)增加維護(hù)費(fèi)用和硬件體系的復(fù)雜程度(更不用說(shuō)購(gòu)買(mǎi)硬件設(shè)備本身和軟件許可的費(fèi)用了)。
我們的目標(biāo)應(yīng)該是首先從現(xiàn)有的應(yīng)用和應(yīng)用服務(wù)器榨取最大的性能,在此之后才考慮添加硬件設(shè)備。從長(zhǎng)遠(yuǎn)來(lái)看,單純靠添加硬件來(lái)提高性能很難獲得好效果:雖然有可能暫時(shí)解決眼前的性能危機(jī),但問(wèn)題仍舊存在,一旦負(fù)載增加了又會(huì)出現(xiàn)。
■ 并發(fā)用戶(hù)
在應(yīng)用服務(wù)器上運(yùn)行應(yīng)用,評(píng)估其在不能響應(yīng)請(qǐng)求或響應(yīng)請(qǐng)求所需時(shí)間超出許可范圍之前能夠支持的最大并發(fā)用戶(hù)數(shù)量。響應(yīng)時(shí)間可以由服務(wù)水準(zhǔn)協(xié)議(Service Level Agreement,SLA,參見(jiàn)用 SLA 保證 Web 服務(wù))定義,規(guī)定一個(gè)請(qǐng)求允許消耗的最長(zhǎng)時(shí)間,超出該時(shí)間就被認(rèn)為不可接受。對(duì)應(yīng)用進(jìn)行負(fù)載測(cè)試時(shí)很重要的一點(diǎn)是必須確保測(cè)試過(guò)程反映了應(yīng)用實(shí)際運(yùn)行過(guò)程中出現(xiàn)的典型事務(wù),因?yàn)楹髞?lái)的性能優(yōu)化措施將針對(duì)負(fù)載測(cè)試的結(jié)果進(jìn)行。如果負(fù)載測(cè)試的事務(wù)不夠典型,就不能有效地保證應(yīng)用能夠象測(cè)試環(huán)境中表現(xiàn)地那樣為用戶(hù)提供服務(wù)。
■ 吞吐量
應(yīng)用和應(yīng)用服務(wù)器的吞吐量可以用每秒完成的事務(wù)數(shù)量來(lái)表示,它從一個(gè)側(cè)面反映了應(yīng)用和應(yīng)用服務(wù)器的運(yùn)行是否正常,指出了服務(wù)器的能力。我們的目標(biāo)是通過(guò)應(yīng)用和應(yīng)用服務(wù)器的調(diào)整,來(lái)盡可能地提高服務(wù)器的吞吐量。
■ 可靠性
除了支持最大數(shù)量的并發(fā)用戶(hù)、可接受的響應(yīng)時(shí)間之外,另一個(gè)要求就是盡量減少請(qǐng)求失敗的次數(shù)。Web服務(wù)器都可能出現(xiàn)故障,最主要的原因是網(wǎng)絡(luò)延遲或超時(shí),而我們優(yōu)化的主要工作就是確保用戶(hù)能夠收到他請(qǐng)求的信息。
【編輯推薦】