最近中文字幕完整版高清,宅男宅女精品国产av天堂,亚洲欧美日韩综合一区二区,最新色国产精品精品视频,中文字幕日韩欧美就去鲁

首頁(yè) > 考試輔導(dǎo) > 計(jì)算機(jī)考試 > IBM認(rèn)證 > IBM認(rèn)證介紹 > 優(yōu)化WebSphere應(yīng)用性能技巧集錦

優(yōu)化WebSphere應(yīng)用性能技巧集錦

        優(yōu)化web應(yīng)用的性能絕不象有些人想象的那樣簡(jiǎn)單易行,它涉及到諸多技術(shù),從最簡(jiǎn)單的html代碼修改,到復(fù)雜的ejb改造,無(wú)不涉及性能問(wèn)題。但有一點(diǎn)是非常清楚的:要想找出和解決web應(yīng)用的性能瓶頸,就必須深入全面地了解信息在web應(yīng)用中的流程。 

  改善web應(yīng)用的性能不一定要局限于web應(yīng)用的java代碼,例如有些時(shí)候,簡(jiǎn)單地改動(dòng)一下html頁(yè)面的質(zhì)量、減少其傳輸頻度和數(shù)據(jù)量就可以有效地提高應(yīng)用的性能表現(xiàn);有時(shí)提高性能的關(guān)鍵卻在于修改web應(yīng)用的數(shù)據(jù)庫(kù)訪問(wèn)部分——這只是java代碼之外影響性能的兩個(gè)因素,其他還有許多因素會(huì)影響到web應(yīng)用的整體性能表現(xiàn)。另一方面,就java程序本身而言,其性能優(yōu)化又可以分成三個(gè)領(lǐng)域:基本的java代碼優(yōu)化,jsp/servlet優(yōu)化,ejb優(yōu)化。 

  一、表現(xiàn)層優(yōu)化 

  web應(yīng)用的最大性能瓶頸常常不在其他地方,而在于最基本的網(wǎng)絡(luò)帶寬限制。如果你的web應(yīng)用也面臨這類問(wèn)題,提高性能最簡(jiǎn)單的辦法是減少http傳輸,例如用javascript實(shí)現(xiàn)客戶端編輯功能以減少數(shù)據(jù)傳輸次數(shù),避免將數(shù)據(jù)發(fā)送到服務(wù)器端再執(zhí)行合法性驗(yàn)證之類的編輯操作。 

  應(yīng)當(dāng)采用一切可能措施減少通過(guò)網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)。例如,你可以要求瀏覽器緩沖模塊化的javascript文件,在script標(biāo)記的src中指定: 
script language="javascript" src="formchek.js"。

  其他減少網(wǎng)絡(luò)傳輸應(yīng)當(dāng)注意的地方還包括:避免過(guò)度使用隱藏域,減少超長(zhǎng)cookie值,在radio、checkbox和select域中用代碼來(lái)替代長(zhǎng)長(zhǎng)的字符串,等等。不過(guò)在html優(yōu)化方面本文不準(zhǔn)備作全面的討論,因?yàn)閣ebsphere應(yīng)用的開(kāi)發(fā)者一般不會(huì)擔(dān)負(fù)設(shè)計(jì)表現(xiàn)層的責(zé)任,只要了解下面這個(gè)原理就足夠了: 

  性能技巧之一:盡可能減少http數(shù)據(jù)傳輸?shù)目偭亢皖l度 

  二、數(shù)據(jù)庫(kù)訪問(wèn) 

  朋友小a對(duì)java的了解極為有限,但他卻成功地改進(jìn)了許多websphere應(yīng)用的性能。他是怎么做到的呢?原來(lái),小a是一個(gè)數(shù)據(jù)庫(kù)專家,他通過(guò)優(yōu)化數(shù)據(jù)庫(kù)訪問(wèn)有效地改進(jìn)了整個(gè)應(yīng)用的性能,但對(duì)于java,他只是略微了解一些有關(guān)jdbc的知識(shí)。在優(yōu)化數(shù)據(jù)庫(kù)訪問(wèn)時(shí),小a做的第一件事情總是檢查數(shù)據(jù)庫(kù)的設(shè)計(jì),有時(shí)他會(huì)建議重新構(gòu)造數(shù)據(jù)庫(kù)的結(jié)構(gòu)(必須指出的是,為了提高性能而重新構(gòu)造數(shù)據(jù)庫(kù)結(jié)構(gòu)有時(shí)可能使數(shù)據(jù)庫(kù)反規(guī)格化(de-normalization),從而帶來(lái)維護(hù)方面的問(wèn)題)。  
性能技巧之二:規(guī)格化(normalization)數(shù)據(jù)庫(kù)結(jié)構(gòu)

  小a做的第二件事情是執(zhí)行數(shù)據(jù)庫(kù)分析,根據(jù)分析結(jié)果提出增加某個(gè)索引、減少某個(gè)索引的建議。完成這一步驟后,小a通?梢宰寫(yīng)用有令人滿意的性能表現(xiàn),根本不必去查看應(yīng)用的java代碼。 

  性能技巧之三:針對(duì)常用的sql操作建立索引,刪除多余的索引 

  有時(shí),為了進(jìn)一步優(yōu)化應(yīng)用的性能,小a會(huì)檢查java(也許應(yīng)該說(shuō)是sql)代碼,經(jīng)常找到j(luò)ava程序沒(méi)有合理運(yùn)用preparedstatement和連接緩沖池的情形。只要把statement類的動(dòng)態(tài)sql替換成preparedstatement類的靜態(tài)sql,從連接池提取sql連接(而不是直接創(chuàng)建連接),應(yīng)用的性能將得到顯著的改善。注意db2 udb(包括其他一些數(shù)據(jù)庫(kù))的preparedstatement是可調(diào)整和配置的。 

  性能技巧之四:合理運(yùn)用preparedstatement和連接池 

  進(jìn)一步分析應(yīng)用的工作流程之后,小a有時(shí)會(huì)建議批量執(zhí)行某些sql命令,這樣就只需一個(gè)對(duì)數(shù)據(jù)庫(kù)服務(wù)器的請(qǐng)求就可以運(yùn)行大量的sql命令。 

  性能技巧之五:考慮批量執(zhí)行sql命令

  既然如此,小a有時(shí)還會(huì)指出,如果應(yīng)用中有些sql命令可以組合成單個(gè)事務(wù)邏輯,那么應(yīng)該可以用一個(gè)存儲(chǔ)過(guò)程來(lái)替代。db2 udb的存儲(chǔ)過(guò)程語(yǔ)言(spl,stored procedure language)非常強(qiáng)大,如果把數(shù)據(jù)庫(kù)操作邏輯從web應(yīng)用轉(zhuǎn)移到數(shù)據(jù)庫(kù),一般總是對(duì)性能有益。不過(guò)需要注意的是,雖然批量執(zhí)行sql命令或使用存儲(chǔ)過(guò)程會(huì)提高性能,但就象重新構(gòu)造數(shù)據(jù)庫(kù)結(jié)構(gòu)一樣,有時(shí)會(huì)帶來(lái)維護(hù)方面的困難。 

  性能技巧之六:考慮使用數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程

  檢查jdbc代碼的時(shí)候,小a總是留意對(duì)象有沒(méi)有及時(shí)正確釋放。這一點(diǎn)其實(shí)很重要。 

  性能技巧之七:及時(shí)關(guān)閉不用的statement、resultset、connection等對(duì)象(但不是在finalize方法內(nèi)) 

三、java代碼 

  前面我們以小a的經(jīng)驗(yàn)為例,探討了web應(yīng)用中數(shù)據(jù)庫(kù)訪問(wèn)性能的重要性。調(diào)整好數(shù)據(jù)庫(kù)之后,接下來(lái)要做的自然是深入分析應(yīng)用的java代碼。從哪里入手呢?你最好使用java分析工具來(lái)找出性能問(wèn)題的焦點(diǎn)所在。優(yōu)化java代碼的性能是一個(gè)艱苦的過(guò)程,因此一個(gè)重要的原則是把精力集中到那些可能引起性能問(wèn)題的代碼上。換句話說(shuō),就是要尊重80/20規(guī)則:利用java分析工具的結(jié)果,調(diào)整帶來(lái)80%性能開(kāi)銷的那20%代碼。 

  性能技巧之八:用java分析工具清楚地界定性能問(wèn)題所在 

  目前市場(chǎng)上已經(jīng)有許多優(yōu)秀的java分析工具,例如ej-technologie的jprofile(),klgroup的jprobe(),以及intuitive systems的optimizeit()。不過(guò)不要忘記websphere studio application developer(wsad)本身也集成了一個(gè)優(yōu)秀的分析器,有條件的話,最好多用幾種分析工具分析java代碼。 

  考慮到資金問(wèn)題,你不一定樂(lè)意購(gòu)買昂貴的分析軟件,但你可以用java本身的命令行工具生成分析信息。例如,在jdk 1.3中,你可以用下面的命令將testorderprocessing類的cpu使用情況保存到j(luò)ava.hprof文件:java -xrunhprof:cpu=times,format=a,file=java.hprof testorderprocessing。 

  這種辦法的缺點(diǎn)是它提供的信息條理不夠清楚,比較繁雜;也許可以找到一些源代碼開(kāi)放的工具輔助分析,但一般不如使用wsad本身的分析工具或商業(yè)化的分析工具方便。另外,如果你已經(jīng)了解哪些代碼塊可能引起性能問(wèn)題,可以通過(guò)保存系統(tǒng)時(shí)間的方式獲得分析信息,例如: 
long starttime = system.currenttimemillis(); 
// 執(zhí)行某些操作
long endtime = system.currenttimemillis();

  3.1 基本篇 

  有人建議“穩(wěn)定性第一,速度第二”,一般而言遵從這個(gè)建議是不會(huì)錯(cuò)的,但這并不妨礙我們?cè)诰帉懘a的同時(shí)運(yùn)用某些已經(jīng)證實(shí)的性能技巧。例如,我們都知道string類是不可變的,連接兩個(gè)string是一項(xiàng)開(kāi)銷很大操作。 

  性能技巧之九:用stringbuffer來(lái)連接兩個(gè)字符串

  也許你已經(jīng)注意到,sun的許多標(biāo)準(zhǔn)java類是線程安全的,這些類內(nèi)部的同步機(jī)制實(shí)際上很容易造成性能問(wèn)題。例如,vector類就是一個(gè)線程安全的類,除非確實(shí)要用到同步機(jī)制,否則使用vector是不值得的,如有可能,應(yīng)當(dāng)盡量改用非線程安全的類如arraylist。 

  性能技巧之十:只有在必要時(shí)才運(yùn)用線程安全的類

  許多人習(xí)慣使用system.out.println來(lái)輸出跟蹤信息,但println要占用不少資源,所以輸出跟蹤信息最好使用專用日志記錄框架,如ibm的jras或apache的log4j。 

  性能技巧之十一:用日志記錄框架類輸出跟蹤信息,而不是使用system.out.println 

  最后一個(gè)提高代碼性能的簡(jiǎn)單技巧是清除類里面的調(diào)試信息,減小類的體積。ibm有一個(gè)wsad插件,它提供了一個(gè)叫做setdebuginfo的任務(wù),可以從ant腳本調(diào)用。 

  性能技巧之十二:從正式發(fā)行的軟件中刪除調(diào)試信息