BEA WebLogic平臺(tái)下的J2EE調(diào)優(yōu) 轉(zhuǎn)載_第1頁(yè)
BEA WebLogic平臺(tái)下的J2EE調(diào)優(yōu) 轉(zhuǎn)載_第2頁(yè)
BEA WebLogic平臺(tái)下的J2EE調(diào)優(yōu) 轉(zhuǎn)載_第3頁(yè)
BEA WebLogic平臺(tái)下的J2EE調(diào)優(yōu) 轉(zhuǎn)載_第4頁(yè)
BEA WebLogic平臺(tái)下的J2EE調(diào)優(yōu) 轉(zhuǎn)載_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、BEA WebLogic平臺(tái)下的J2EE調(diào)優(yōu) 轉(zhuǎn)載隨著近來(lái)J2EE軟件廣泛地應(yīng)用于各行各業(yè),系統(tǒng)調(diào)優(yōu)也越來(lái)越引起軟件開(kāi)發(fā)者和應(yīng)用服務(wù)器提供商的重視。而對(duì)于最終客戶(hù)來(lái)說(shuō),在一個(gè)高效、穩(wěn)定地實(shí)現(xiàn)他們的業(yè)務(wù)需求已經(jīng)是他們的基本要求。所以J2EE調(diào)優(yōu)顯得非常重要,而B(niǎo)EA WebLogic Server是業(yè)界領(lǐng)先的應(yīng)用服務(wù)器,BEA WebLogic平臺(tái)下的J2EE調(diào)優(yōu)也就尤為重要,她將為我們提供普遍的J2EE調(diào)優(yōu)方案。最近網(wǎng)絡(luò)、雜志上的J2EE調(diào)優(yōu)文章層出不窮。本人也將自己平時(shí)工作中的一些經(jīng)驗(yàn)積累分享給大家,拋磚引玉。目錄前言第一章應(yīng)用程序調(diào)優(yōu)1.1.1通用代碼調(diào)優(yōu)1.1.2減小沒(méi)有必要的操作1.1

2、.3使用合適的類(lèi)型1.1.4盡量使用pool,buffer和cache 1.2 JDBC代碼調(diào)優(yōu)1.2.1嚴(yán)格資源使用1.2.2實(shí)用技巧1.2.3優(yōu)化SQL語(yǔ)句1.3 Web代碼調(diào)優(yōu)1.3.1 HttpSession的使用1.3.2 JSP代碼調(diào)優(yōu)1.3.3 Servlet代碼調(diào)優(yōu)1.4 JMS代碼調(diào)優(yōu)1.4.1注意必要的事項(xiàng),避免使用不必要的特征1.4.2消息類(lèi)型的選擇1.4.3確認(rèn)方式的選擇和JMS事務(wù)1.5 EJB代碼調(diào)優(yōu)1.5.1有效使用設(shè)計(jì)模式1.5.2使用EJB和WebLogic的特性1.5.3緩存資源1.5.4如何選擇和使用Entity Bean 1.5.5其他的一些小技巧第二章

3、應(yīng)用服務(wù)器調(diào)優(yōu)2.1 JVM調(diào)優(yōu)2.1.1垃圾收集和堆大小2.1.2 jRockit調(diào)優(yōu)2.2 Server調(diào)優(yōu)2.2.1盡量使用本地I/O庫(kù)2.2.2調(diào)整默認(rèn)執(zhí)行線(xiàn)程數(shù)2.2.3調(diào)整連接參數(shù)2.2.4創(chuàng)建新的執(zhí)行隊(duì)列2.3 JDBC調(diào)優(yōu)2.3.1調(diào)整連接池配置2.4 WEB調(diào)優(yōu)2.4.1調(diào)整WEB應(yīng)用描述符2.5 JMS調(diào)優(yōu)2.6 EJB調(diào)優(yōu)2.6.1調(diào)整pool和cache 2.6.2優(yōu)化事務(wù)隔離級(jí)別和事務(wù)屬性2.6.3其他一些小技巧第三章數(shù)據(jù)庫(kù)調(diào)優(yōu)3.1.1 Oracle性能優(yōu)化3.1.2 Oracle的其他調(diào)整第四章操作系統(tǒng)調(diào)優(yōu)4.1操作系統(tǒng)調(diào)整4.1.1 HP-UX 4.1.2 So

4、laris 4.1.3 AIX 4.1.4 Linux 4.1.5 Windows第五章性能監(jiān)控和性能分析5.1性能瓶頸5.2操作系統(tǒng)監(jiān)控5.3數(shù)據(jù)庫(kù)監(jiān)控5.4 WebLogic監(jiān)控5.4.1 JVM監(jiān)控5.4.2 Console監(jiān)控5.4.3實(shí)用工具分析5.5應(yīng)用程序分析總結(jié)參考文獻(xiàn)關(guān)于作者前言(目錄)隨著近來(lái)J2EE軟件廣泛地應(yīng)用于各行各業(yè),系統(tǒng)調(diào)優(yōu)也越來(lái)越引起軟件開(kāi)發(fā)者和應(yīng)用服務(wù)器提供商的重視。而對(duì)于最終客戶(hù)來(lái)說(shuō),在一個(gè)高效、穩(wěn)定地實(shí)現(xiàn)他們的業(yè)務(wù)需求已經(jīng)是他們的基本要求。所以J2EE調(diào)優(yōu)顯得非常重要,而B(niǎo)EA WebLogic Server是業(yè)界領(lǐng)先的應(yīng)用服務(wù)器,BEA WebLogic

5、平臺(tái)下的J2EE調(diào)優(yōu)也就尤為重要,她將為我們提供普遍的J2EE調(diào)優(yōu)方案。最近網(wǎng)絡(luò)、雜志上的J2EE調(diào)優(yōu)文章層出不窮。本人也將自己平時(shí)工作中的一些經(jīng)驗(yàn)積累分享給大家,拋磚引玉。本文從J2EE應(yīng)用架構(gòu)(下圖)來(lái)分別剖析系統(tǒng)調(diào)優(yōu),首先我們一般會(huì)從應(yīng)用程序出發(fā),去審核代碼,做到代碼級(jí)的優(yōu)化,然后再調(diào)整應(yīng)用服務(wù)器(BEA WebLogic8.1)和數(shù)據(jù)庫(kù)(Oracle9i)的參數(shù),最后當(dāng)然是調(diào)整操作系統(tǒng)和網(wǎng)絡(luò)的性能(包括硬件升級(jí))。誠(chéng)然,在我遇到的很多項(xiàng)目中,都是出現(xiàn)了性能問(wèn)題后才想到調(diào)優(yōu),而且一般都是先進(jìn)行系統(tǒng)參數(shù)調(diào)整,實(shí)在解決不了才會(huì)對(duì)代碼進(jìn)行檢查.實(shí)際上,我們應(yīng)當(dāng)將代碼級(jí)的調(diào)優(yōu)放在應(yīng)用設(shè)計(jì)時(shí)來(lái)做,

6、測(cè)試生產(chǎn)時(shí)修改代碼將是一件極其痛苦的事情。WebLogic平臺(tái)J2EE應(yīng)用架構(gòu)第一章應(yīng)用程序調(diào)優(yōu)(目錄)1.1.1通用代碼調(diào)優(yōu)1.1.2減小沒(méi)有必要的操作對(duì)象的創(chuàng)建是個(gè)很昂貴的工作,所以我們應(yīng)當(dāng)盡量減少對(duì)象的創(chuàng)建,在需要的時(shí)候聲明它,初始化它,不要重復(fù)初始化一個(gè)對(duì)象,盡量能做到再使用,而用完后置null有利于垃圾收集。讓類(lèi)實(shí)現(xiàn)Cloneable接口,同時(shí)采用工廠(chǎng)模式,將減少類(lèi)的創(chuàng)建,每次都是通過(guò)clone()方法來(lái)獲得對(duì)象。另外使用接口也能減少類(lèi)的創(chuàng)建。對(duì)于成員變量的初始化也應(yīng)盡量避免,特別是在一個(gè)類(lèi)派生另一個(gè)類(lèi)時(shí)。異常拋出對(duì)性能不利。拋出異常首先要?jiǎng)?chuàng)建一個(gè)新的對(duì)象。Throwable接口的構(gòu)

7、造函數(shù)調(diào)用名為,fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法檢查堆棧,收集調(diào)用跟蹤信息。只要有異常被拋出,VM就必須調(diào)整調(diào)用堆棧,因?yàn)樵谔幚磉^(guò)程中創(chuàng)建了一個(gè)新的對(duì)象。異常只能用于錯(cuò)誤處理,不應(yīng)該用來(lái)控制程序流程。此外,建議關(guān)閉Debug輸出,盡量少用串行化、同步操作和耗時(shí)昂貴的服務(wù)(如Date()。1.1.3使用合適的類(lèi)型當(dāng)原始類(lèi)型不能滿(mǎn)足我們要求時(shí),使用復(fù)雜類(lèi)型。String和StringBuffer的區(qū)別自不必說(shuō)了,是我們使用最多的類(lèi)型,在涉及到字符運(yùn)算時(shí),強(qiáng)烈建議使用StringBuffer。在做String匹配時(shí)使用inter

8、n()代替equal()。帶有final修飾符的類(lèi)是不可派生的,如果指定一個(gè)類(lèi)為final,則該類(lèi)所有的方法都是final。Java編譯器會(huì)尋找機(jī)會(huì)內(nèi)聯(lián)所有的final方法,這將能夠使性能平均提高50%。類(lèi)的屬性和方式使用final或者static修飾符也是有好處的。調(diào)用方法時(shí)傳遞的參數(shù)以及在調(diào)用中創(chuàng)建的臨時(shí)變量都保存在棧(Stack)中,速度較快。所以盡量使用局部變量。ArrayList和Vector,HashMap和Hashtable是我們經(jīng)常用到的類(lèi),前者不支持同步,后者支持同步,前者性能更好,大多數(shù)情況下選擇前者。1.1.4盡量使用pool,buffer和cache使用pool、buf

9、fer和cache能大大提高系統(tǒng)的性能,這在J2EE的大部分技術(shù)中都是適用的。在WebLogic中就大量使用了池:JDBC Connection Pool、Socket Pool、Object Pool和Thread Pool。I/O操作中,buffer是必須的,特別是對(duì)大文件的操作,不然容易造成內(nèi)存溢出。字節(jié)操作最快,所以盡可能采用write(byte),Buffered FileOutputStream比Buffered FileWriter要快,因?yàn)镕ileWriter需要Unicode到Byte的轉(zhuǎn)換。而后面講到的JDBC、JSP、EJB和JMS我們都非常建議使用buffer和cach

10、e。為HttpServletResponse設(shè)置buffersize,使用wl-cache,緩存在JNDI樹(shù)上獲取的對(duì)象等等。此外,使用JDK 1.4的非阻塞I/O對(duì)性能也有很大提高。1.2 JDBC代碼調(diào)優(yōu)1.2.1嚴(yán)格資源使用JDBC代碼調(diào)優(yōu)最大的原則就是使用WebLogic的連接池,而不是自己直連數(shù)據(jù)庫(kù)。在我接觸的很多自己實(shí)現(xiàn)連接池的項(xiàng)目中,大部分遇到死鎖和連接泄漏的問(wèn)題,最后得不得修改代碼。而WebLogic提供了功能強(qiáng)大,性能良好的數(shù)據(jù)庫(kù)連接池,我們要做的只是封裝一個(gè)連接管理類(lèi),從JNDI樹(shù)上獲取數(shù)據(jù)源并緩存,得到連接,并提供一系列關(guān)閉數(shù)據(jù)庫(kù)資源的方法。對(duì)任何資源使用的原則是用完即關(guān)

11、,不管是數(shù)據(jù)庫(kù)資源、上下文環(huán)境,還是文件。數(shù)據(jù)庫(kù)資源的泄漏極易造成內(nèi)存泄漏,乃至系統(tǒng)崩潰。在使用完數(shù)據(jù)庫(kù)資源后依次關(guān)閉ResultSet,Statement和Connection,而在一個(gè)數(shù)據(jù)庫(kù)連接多次進(jìn)行數(shù)據(jù)庫(kù)操作時(shí)要特別注意ResultSet和Statement依次關(guān)閉。try/open connection pstmt=conn.prepareStatement(strSql1);pstmt.executeUpdate();pstmt.close();pstmt=conn.prepareStatement(strSql2);rs=pstmt.executeQuery();while(rs

12、.next()/processrs.close();pstmt.close();catch(Exception e)/close rs,psmt,confinally/close rs,psmt,con1.2.2實(shí)用技巧在JDBC操作中還有一些小的技巧跟大家分享:由于獲取連接時(shí)默認(rèn)自動(dòng)提交方式,使用connection.setAutoCommit(false)關(guān)閉自動(dòng)提交,使用PreparedStatement,批量更新,業(yè)務(wù)復(fù)雜或者大數(shù)據(jù)量操作時(shí)使用存儲(chǔ)過(guò)程,盡量使用RowSet,此外設(shè)置記錄集讀取緩存FetchSize和設(shè)置記錄集讀取方向FetchDirection對(duì)性能也有一定的提高。1

13、.2.3優(yōu)化SQL語(yǔ)句SQL語(yǔ)句的優(yōu)化牽涉到很多數(shù)據(jù)庫(kù)的知識(shí),需要與索引配合,因此需要DBA對(duì)代碼中的SQL進(jìn)行檢查測(cè)試。常見(jiàn)的,select*不提倡使用,效率極差,建議顯式獲取列,即使是所有字段也應(yīng)羅列,而取總數(shù)時(shí)使用count(*),為提高cache的命中率,盡量做到SQL重用。對(duì)于大數(shù)據(jù)量的查詢(xún),可以充分利用Oracle數(shù)據(jù)庫(kù)的特性,每次取出m-n行的數(shù)據(jù),實(shí)現(xiàn)分頁(yè)查詢(xún)。另外,提高性能的好選擇可能就是把所有的字符數(shù)據(jù)都保存為Unicode,Java以Unicode形式處理所有數(shù)據(jù),因此,數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序不必再執(zhí)行轉(zhuǎn)換過(guò)程。1.3 Web代碼調(diào)優(yōu)1.3.1 HttpSession的使用應(yīng)用服

14、務(wù)器保存很多會(huì)話(huà)時(shí),容易造成內(nèi)存不足,所以盡量減少session的使用,放置session里的對(duì)象不應(yīng)該是大對(duì)象,最好是簡(jiǎn)單小對(duì)象,實(shí)現(xiàn)串行化接口。當(dāng)會(huì)話(huà)不再需要時(shí),應(yīng)當(dāng)及時(shí)調(diào)用invalidate()方法清除會(huì)話(huà)。而當(dāng)某個(gè)變量不需要時(shí),及時(shí)調(diào)用removeAttribute()方法清除變量。請(qǐng)勿將EJB對(duì)象放置在session中。1.3.2 JSP代碼調(diào)優(yōu)目前,在JSP頁(yè)面中引入外部資源的方法主要有兩種:include指令,以及include動(dòng)作。include指令:例如!-include file="copyright.html"-,該指令在編譯時(shí)引入指定的資源。在編譯

15、之前,帶有include指令的頁(yè)面和指定的資源被合并成一個(gè)文件。被引用的外部資源在編譯時(shí)就確定,比運(yùn)行時(shí)才確定資源更高效。include動(dòng)作:例如。該動(dòng)作引入指定頁(yè)面執(zhí)行后生成的結(jié)果。由于它在運(yùn)行時(shí)完成,因此對(duì)輸出結(jié)果的控制更加靈活。但是,只有當(dāng)被引用的內(nèi)容頻繁地改變時(shí),或者在對(duì)主頁(yè)面的請(qǐng)求沒(méi)有出現(xiàn)之前,被引用的頁(yè)面無(wú)法確定時(shí),使用include動(dòng)作才合算。對(duì)于那些無(wú)需跟蹤會(huì)話(huà)狀態(tài)的jsp,關(guān)閉自動(dòng)創(chuàng)建的會(huì)話(huà)可以節(jié)省一些資源。使用如下page指令:!-page session="false-;盡量不要將JSP頁(yè)面定義為單線(xiàn)程,應(yīng)設(shè)置為!-age isThreadSafe="

16、true-;在JSP頁(yè)面最好使用輸出緩存功能,如:!-age buffer="32kb-;盡量用wl:cache定制標(biāo)記來(lái)緩存靜態(tài)或相對(duì)靜態(tài)的內(nèi)容,緩存jsp:include操作的結(jié)果能顯著提高應(yīng)用程序的運(yùn)行性能。1.3.3 Servlet代碼調(diào)優(yōu)Servlet代碼調(diào)優(yōu)比較簡(jiǎn)單:在Servlet之間跳轉(zhuǎn)時(shí),forward比sendRedirect更有效;設(shè)置HttpServletResponse緩沖區(qū),如:response.setBufferSize(20000);在init()方法里緩存靜態(tài)數(shù)據(jù),而在destroy()中釋放它;建議在Servlet里使用ServletOutputS

17、tream輸出圖片等對(duì)象;避免在Servlet和Jsp中定界事務(wù)等。1.4 JMS代碼調(diào)優(yōu)1.4.1注意必要的事項(xiàng),避免使用不必要的特征JMS提供了強(qiáng)有力的消息處理機(jī)制,但是為了最大限度的提高JMS系統(tǒng)的性能,應(yīng)避免使用不需要使用的特征,同時(shí)也要注意必要的事項(xiàng)。比如:盡量使用接收程序能直接使用的最簡(jiǎn)單、最小的消息類(lèi)型;消息選擇器要盡可能簡(jiǎn)單(最好不使用),盡量不要使用復(fù)雜的操作符,如like、in或者between等,使用字符串?dāng)?shù)據(jù)類(lèi)型的速度最慢;務(wù)必為特定的應(yīng)用程序定義特定的JMS連接工廠(chǎng),并且禁用默認(rèn)的JMS連接工廠(chǎng);不要在javax.*與weblogic.*的名字空間中使用JNDI名稱(chēng);

18、盡量使用異步消費(fèi)者,線(xiàn)程不必封鎖以等待消息的到達(dá);使用完JNDI樹(shù)上的資源后注意關(guān)閉。1.4.2消息類(lèi)型的選擇標(biāo)準(zhǔn)JMS提供了五種消息類(lèi)型,而TextMessage應(yīng)用最為普遍,當(dāng)發(fā)送的消息是幾種原始數(shù)據(jù)類(lèi)型的集合體時(shí),最好使用MapMessage消息類(lèi)型,而不要使用ObjectMessage,以便減少不同系統(tǒng)間的耦合。此外消息是否使用壓縮要慎重考慮,壓縮未必能減少消息大小。如果生產(chǎn)者、消費(fèi)者和目的地并置在同一WebLogic Server內(nèi)部,通常不使用壓縮。WebLogic特有的XMLMessage能為運(yùn)行于消息主體之上的消息選擇器提供內(nèi)嵌式支持,而且易于數(shù)據(jù)交換。因此,建議應(yīng)用程序之間傳

19、送消息使用XML消息格式,而應(yīng)用程序內(nèi)部間傳送消息使用二進(jìn)制消息格式。1.4.3確認(rèn)方式的選擇和JMS事務(wù)使用事務(wù)性會(huì)話(huà)時(shí),盡量使用恰當(dāng)?shù)南⒋_認(rèn)方式:如果需求允許,使用NO_ACKKNOWLEDGE;非持久的訂閱者使用DUPS_OK_ACKNOWLEDGE或者M(jìn)ULTICAST_NO_ACKNOWLEDGE。而使用JTA的UserTransaction,確認(rèn)方式將被忽略。在使用JMS事務(wù)時(shí),無(wú)效的消息會(huì)導(dǎo)致事務(wù)的回滾,以致消息重發(fā)這樣的死循環(huán)。此時(shí),可以將無(wú)效消息發(fā)送到錯(cuò)誤消息隊(duì)列,并提交JMS事務(wù),這將確保消息不會(huì)再次傳遞。1.5 EJB代碼調(diào)優(yōu)1.5.1有效使用設(shè)計(jì)模式GoF的設(shè)計(jì)模式為

20、我們實(shí)現(xiàn)高性能、易擴(kuò)展的J2EE應(yīng)用提供理論保障和技術(shù)支持。而EJB作為J2EE的核心組件和技術(shù),善用設(shè)計(jì)模式對(duì)系統(tǒng)性能影響很大。Service Locator和Value Object已為我們所熟悉,F(xiàn)loyd Marinescu的EJB Design Patterns中的Session Fa?ade、Message Fa?ade、EJB Command和Data Transfer Object等設(shè)計(jì)模式更是為我們提供設(shè)計(jì)典范:緩存對(duì)EJBHome的訪(fǎng)問(wèn);使用門(mén)面模式,不暴露Entity Bean,用Session Bean封裝Entity Bean;如果可以異步處理,則用MDB代替Sess

21、ion Bean;封裝業(yè)務(wù)邏輯在輕量級(jí)JavaBean中;使用值對(duì)象等簡(jiǎn)單對(duì)象傳遞數(shù)據(jù);不直接使用get/set方法操作Entity Bean。當(dāng)然過(guò)度使用模式或者牽強(qiáng)套用模式也是不提倡的,總的原則就是減少網(wǎng)絡(luò)流量,改進(jìn)事務(wù)管理。1.5.2使用EJB和WebLogic的特性使用EJB和WebLogic的新特性往往能提高性能。與EJB2.0特性相關(guān)的技巧有:一個(gè)Application中使用本地接口,對(duì)于Entity Bean肯定使用本地接口,避免遠(yuǎn)程調(diào)用的開(kāi)銷(xiāo);使用CMP管理關(guān)系,而不是BMP,EJB2.0中CMP的性能大大改善,性能和移植性都優(yōu)于BMP;使用ejbSelect進(jìn)行內(nèi)部查詢(xún);使用

22、home方法進(jìn)行外部查詢(xún)和批處理;數(shù)據(jù)庫(kù)驅(qū)動(dòng)級(jí)聯(lián)刪除等。與WebLogic特性相關(guān)的技巧有:使用自動(dòng)生成主鍵,WebLogic為Oracle和Sqlserver兩種數(shù)據(jù)庫(kù)的CMP提供了自動(dòng)生成主鍵功能,節(jié)約了Entity Bean產(chǎn)生主鍵的時(shí)間,同時(shí)設(shè)key-cache-size不小于100;WebLogic管理事務(wù)性能更好,使用容器管理,而不是Bean管理事務(wù);WebLogic提供了為CMP動(dòng)態(tài)查詢(xún)和批量插入功能,對(duì)性能也有很大幫助。1.5.3緩存資源對(duì)SLSB或者M(jìn)DB來(lái)說(shuō),使用setMesssageDrivenContext()或者ejbCreate()方法緩存特定資源,在ejbRemo

23、ve()方法里釋放;對(duì)SLSB或者M(jìn)DB來(lái)說(shuō),使用setSessionContext()或者ejbCreate()方法緩存特定資源,在ejbRemove()方法里釋放;對(duì)Entity Bean來(lái)說(shuō),使用setEntityContext()方法緩存特定資源,在unSetEntityContext()方法里釋放。1.5.4如何選擇和使用Entity Bean 1.在設(shè)計(jì)EJB時(shí),要適當(dāng)考慮EJB的粒度,細(xì)粒度的EJB在事務(wù)管理和資源管理的開(kāi)銷(xiāo)太大,盡量創(chuàng)建粗粒度的EJB,不要太粗,粗到能滿(mǎn)足實(shí)際需求就可以;2.Entity Bean不是唯一方式,如果只有一個(gè)很小的數(shù)據(jù)子集被經(jīng)常改變,建議采用JDO

24、;3.在操作大數(shù)據(jù)量的時(shí)候,直接采用JDBC比Entity Bean更有效;4.避免采用返回很大數(shù)據(jù)組的finder方法,如FindAll()方法,因?yàn)樗膶?shí)現(xiàn)代價(jià)太大;5.考慮設(shè)置域組field groups,減少?zèng)]有必要并昂貴的屬性加載,如BLOB;6.對(duì)于EJB1.1或者BMP,可以設(shè)置is-modified-method-name屬性,根據(jù)isModified()的值來(lái)判斷是否調(diào)用ejbStore()等方法,減少?zèng)]有必要運(yùn)算;7.避免連接多個(gè)表創(chuàng)建BMP,可以使用視圖,存儲(chǔ)過(guò)程或者O/R Mapping等方式。1.5.5其他的一些小技巧1.考慮使用javax.ejb.SessionSy

25、nchronization接口,提供在Rollback之后恢復(fù)數(shù)據(jù)的方法:afterBegin(),beforeCompletion(),afterCompletion();2.使用完SFSB之后,調(diào)用remove()方法釋放實(shí)例;3.假如你不需要EJB服務(wù)的時(shí)候,建議使用普通Java類(lèi);4.避免EJB之間相互調(diào)用;5.使用多讀模式。第二章應(yīng)用服務(wù)器調(diào)優(yōu)(目錄)2.1 JVM調(diào)優(yōu)2.1.1垃圾收集和堆大小垃圾收集(GC)是指JVM釋放Java堆中不再使用的對(duì)象所占用的內(nèi)存的過(guò)程,而Java堆(Heap)是指Java應(yīng)用程序?qū)ο笊娴目臻g。堆大小決定了GC的頻度和時(shí)間。堆越大,GC頻度低,速度慢

26、。堆越小,GC頻度高,速度快。所以GC和堆大小是一組矛盾。為了獲取理想的Heap堆大小,需要使用-verbosegc參數(shù)(Sun jdk:-Xloggc:)以打開(kāi)詳細(xì)的GC輸出。分析GC的頻度和時(shí)間,結(jié)合應(yīng)用最大負(fù)載所需內(nèi)存情況,得出堆的大小。通常情況下,我們建議使用可用內(nèi)存(除操作系統(tǒng)和其他應(yīng)用程序占用之外的內(nèi)存)70-80%,為避免堆大小調(diào)整引起的開(kāi)銷(xiāo),設(shè)置內(nèi)存堆的最小值等于最大值即:-Xms=-Xmx。而為了防止內(nèi)存溢出,建議在生產(chǎn)環(huán)境堆大小至少為256M(Platform至少512M),實(shí)際環(huán)境中512M1G左右性能最佳,2G以上是不可取的,在調(diào)整內(nèi)存時(shí)可能需要調(diào)整核心參數(shù)進(jìn)程的允許最

27、大內(nèi)存數(shù)。對(duì)于sun和hp的jvm,永久域太小(默認(rèn)4M)也可能造成內(nèi)存溢出,應(yīng)增加參-XX:MaxPermSize=128m。建議設(shè)置臨時(shí)域-Xmn的大小為-Xmx的1/41/3,SurvivorRatio為8。為了獲得更好的性能,建議在啟動(dòng)文件設(shè)置WebLogic為產(chǎn)品模式,此時(shí)sun和hp jvm JIT引擎為-server,默認(rèn)情況下打開(kāi)JIT編譯模式對(duì)性能也有幫助。調(diào)整Chunk Size和Chunk Pool Size也可能對(duì)系統(tǒng)的吞吐量有提高。此外還需關(guān)閉顯示GC:-XX:+DisableExplicitGC。當(dāng)然在Intel平臺(tái)上使用jRockit(使用參數(shù)-jrockit)無(wú)

28、疑大大提高WebLogic性能。2.1.2 jRockit調(diào)優(yōu)jRockit支持四種垃圾收集器:分代復(fù)制收集器、單空間并發(fā)收集器、分代并發(fā)收集器和并行收集器。默認(rèn)狀態(tài)下,JRockit使用分代并發(fā)收集器。要改變收集器,可使用-Xgc:,對(duì)應(yīng)四個(gè)收集器分其他為gencopy,singlecom,gencon以及parallel。為得到更好的響應(yīng)性能,應(yīng)該使用并發(fā)垃圾回收器:-Xgc:gencon,可使用-Xms和-Xmx設(shè)置堆棧的初始大小和最大值,要設(shè)置護(hù)理域-Xns為-Xmx的10%。而如果要得到更好的性能,應(yīng)該選用并行垃圾回收器:-Xgc:parallel,由于并行垃圾回收器不使用nurse

29、ry,不必設(shè)置-Xns。如果你的線(xiàn)程大于100或者在linux平臺(tái)下,可以嘗試使用瘦線(xiàn)程模式:-Xthinthread,同時(shí)關(guān)閉Native IO:-Xallocationtype:global。jRockit還提供了強(qiáng)大的圖形化監(jiān)控工具Jrockit Management Console。欲詳細(xì)了解JRockit可訪(fǎng)問(wèn):。2.2 Server調(diào)優(yōu)WebLogic Server的核心組件由監(jiān)聽(tīng)線(xiàn)程,套接字復(fù)用器和可執(zhí)行線(xiàn)程的執(zhí)行隊(duì)列組成。當(dāng)服務(wù)器由監(jiān)聽(tīng)線(xiàn)程接收到連接請(qǐng)求后,將對(duì)它的連接控制權(quán)交給等待接收請(qǐng)求的套接字復(fù)用器。然后套接字復(fù)用器讀取離開(kāi)套接字的請(qǐng)求,并將此請(qǐng)求及相關(guān)安全信息或事務(wù)處理

30、環(huán)境一起置入適當(dāng)?shù)膱?zhí)行隊(duì)列中(一般為默認(rèn)的執(zhí)行隊(duì)列)。當(dāng)有一個(gè)請(qǐng)求出現(xiàn)在執(zhí)行隊(duì)列中時(shí),就會(huì)有一個(gè)空閑的執(zhí)行線(xiàn)程從該隊(duì)列中取走發(fā)來(lái)的該請(qǐng)求,并返回應(yīng)答,然后等待下一次請(qǐng)求。因此要提高WebLogic的性能,就必須從調(diào)整核心組件性能出發(fā)。2.2.1盡量使用本地I/O庫(kù)WebLogic Server有兩套套接字復(fù)用器:Java版和本地庫(kù)。采用小型本地庫(kù)更有效,盡量激活Enable Native IO(默認(rèn)),此時(shí)UNIX默認(rèn)使用CPUs+1個(gè)線(xiàn)程,Window下為雙倍CPU。如果系統(tǒng)不能加載本地庫(kù),將會(huì)拋出java.lang.UnsatisfiedLinkException,此時(shí)只能使用Java套接

31、字復(fù)用器,可以調(diào)整socket readers百分比,默認(rèn)為33%。該參數(shù)可以在Console Server Tuning Configuration配置欄里設(shè)置。2.2.2調(diào)整默認(rèn)執(zhí)行線(xiàn)程數(shù)理想的默認(rèn)執(zhí)行線(xiàn)程數(shù)是由多方面的因素決定的,比如機(jī)器CPU性能、總線(xiàn)體系架構(gòu)、I/O、操作系統(tǒng)的進(jìn)程調(diào)度機(jī)制、JVM的線(xiàn)程調(diào)度機(jī)制。WebLogic生產(chǎn)環(huán)境下默認(rèn)的線(xiàn)程為25個(gè),隨著CPU個(gè)數(shù)的增加,WebLogic可以近乎線(xiàn)性地提高線(xiàn)程數(shù)。線(xiàn)程數(shù)越多,花費(fèi)在線(xiàn)程切換的時(shí)間也就越多,線(xiàn)程數(shù)越小,CPU可能無(wú)法得到充分利用。為獲取一個(gè)理想的線(xiàn)程數(shù),需要經(jīng)過(guò)反復(fù)的測(cè)試。在測(cè)試中,可以以25*CPUs為基準(zhǔn)進(jìn)行

32、調(diào)整。當(dāng)空閑線(xiàn)程較少,CPU利用率比較低時(shí),可以適當(dāng)增加線(xiàn)程數(shù)的大小(每五個(gè)遞增)。對(duì)于PC Server和Window 2000,則最好每個(gè)CPU小于50個(gè)線(xiàn)程,以CPU利用率為90%左右為佳。由于目前WebLogic執(zhí)行線(xiàn)程沒(méi)有縮小線(xiàn)程數(shù)的功能,所以應(yīng)將參數(shù)Threads Increase設(shè)置為0,同時(shí)不應(yīng)改變優(yōu)先級(jí)的大小。2.2.3調(diào)整連接參數(shù)WebLogic Server用Accept Backlog參數(shù)規(guī)定服務(wù)器向操作系統(tǒng)請(qǐng)求的隊(duì)列大小,默認(rèn)值為50。當(dāng)系統(tǒng)重載負(fù)荷時(shí),這個(gè)值可能過(guò)小,日志中報(bào)Connection Refused,導(dǎo)致有效連接請(qǐng)求遭到拒絕,此時(shí)可以提高Accept B

33、acklog 25%直到連接拒絕錯(cuò)誤消失。對(duì)于Portal類(lèi)型的應(yīng)用,默認(rèn)值往往是不夠的。Login Timeout和SSL Login Timeout參數(shù)表示普通連接和SSL連接的超時(shí)時(shí)間,如果客戶(hù)連接被服務(wù)器中斷或者SSL容量大,可以嘗試增加該值。這些參數(shù)可以在Console Server Tuning Configration配置欄里找到。2.2.4創(chuàng)建新的執(zhí)行隊(duì)列創(chuàng)建新的執(zhí)行隊(duì)列有助于解決核心業(yè)務(wù)優(yōu)先、避免交叉阻塞、死鎖和長(zhǎng)時(shí)間處理的業(yè)務(wù)等問(wèn)題。通常會(huì)將自己的執(zhí)行隊(duì)列和默認(rèn)的執(zhí)行隊(duì)列設(shè)置不同的優(yōu)先級(jí),這里優(yōu)先級(jí)不應(yīng)設(shè)為9或者10。定義一個(gè)新的執(zhí)行隊(duì)列很容易,利用View Excute

34、Queue選項(xiàng)中的Configure anew Excute Queue鏈接即可定制新的執(zhí)行隊(duì)列。創(chuàng)建新的執(zhí)行隊(duì)列后,用戶(hù)需要為應(yīng)用程序的J2EE組件配置分配策略,以便它可以找到新的隊(duì)列。舉個(gè)例子:要將servlet或jsp捆綁到一個(gè)特定的執(zhí)行隊(duì)列,必須替換web.xml文件項(xiàng),將wl-dispatch-policy初始化參數(shù)設(shè)置為自己的執(zhí)行隊(duì)列名。servletname/directoryname/deployment.jsp wl-dispatch-policy NewExecuteQueueName我們可以為一個(gè)jsp或者servlet乃至一個(gè)WEB應(yīng)用設(shè)置自己的執(zhí)行隊(duì)列。同時(shí)也可以為E

35、JB設(shè)置自己的執(zhí)行隊(duì)列。對(duì)于執(zhí)行時(shí)間比較長(zhǎng)的MDB,建議使用自己的執(zhí)行隊(duì)列。2.3 JDBC調(diào)優(yōu)2.3.1調(diào)整連接池配置JDBC Connection Pool的調(diào)優(yōu)受制于WebLogic Server線(xiàn)程數(shù)的設(shè)置和數(shù)據(jù)庫(kù)進(jìn)程數(shù),游標(biāo)的大小。通常我們?cè)谝粋€(gè)線(xiàn)程中使用一個(gè)連接,所以連接數(shù)并不是越多越好,為避免兩邊的資源消耗,建議設(shè)置連接池的最大值等于或者略小于線(xiàn)程數(shù)。同時(shí)為了減少新建連接的開(kāi)銷(xiāo),將最小值和最大值設(shè)為一致。增加Statement Cache Size對(duì)于大量使用PreparedStatement對(duì)象的應(yīng)用程序很有幫助,WebLogic能夠?yàn)槊恳粋€(gè)連接緩存這些對(duì)象,此值默認(rèn)為10。在

36、保證數(shù)據(jù)庫(kù)游標(biāo)大小足夠的前提下,可以根據(jù)需要提高Statement Cache Size。比如當(dāng)你設(shè)置連接數(shù)為25,Cache Size為10時(shí),數(shù)據(jù)庫(kù)可能需要打開(kāi)25*10=250個(gè)游標(biāo)。不幸的是,當(dāng)遇到與PreparedStatement Cache有關(guān)的應(yīng)用程序錯(cuò)誤時(shí),你需要將Cache Size設(shè)置為0。盡管JDBC Connection Pool提供了很多高級(jí)參數(shù),在開(kāi)發(fā)模式下比較有用,但大部分在生產(chǎn)環(huán)境下不需調(diào)整。這里建議最好不要設(shè)置測(cè)試表,同時(shí)Test Reserved Connections和Test Released Connections也無(wú)需勾上。當(dāng)然如果你的數(shù)據(jù)庫(kù)不穩(wěn)定

37、,時(shí)斷時(shí)續(xù),你就可能需要上述的參數(shù)打開(kāi)。最后提一下驅(qū)動(dòng)程序類(lèi)型的選擇,以O(shè)racle為例,Oracle提供thin驅(qū)動(dòng)和oci驅(qū)動(dòng),從性能上來(lái)講,oci驅(qū)動(dòng)強(qiáng)于thin驅(qū)動(dòng),特別是大數(shù)據(jù)量的操作。但在簡(jiǎn)單的數(shù)據(jù)庫(kù)操作中,性能相差不大,隨著thin驅(qū)動(dòng)的不斷改進(jìn),這一弱勢(shì)將得到彌補(bǔ)。而thin驅(qū)動(dòng)的移植性明顯強(qiáng)于oci驅(qū)動(dòng)。所以在通常情況下建議使用thin驅(qū)動(dòng)。而最新驅(qū)動(dòng)器由于WebLogic server/bin目錄下的類(lèi)包可能不是最新的,請(qǐng)以O(shè)racle網(wǎng)站為準(zhǔn):。2.4 WEB調(diào)優(yōu)2.4.1調(diào)整WEB應(yīng)用描述符WEB應(yīng)用除代碼之外的調(diào)優(yōu)比較簡(jiǎn)單,僅僅是對(duì)一些WEB應(yīng)用描述符的調(diào)整。首先關(guān)閉

38、Session Monitoring Enabled,僅僅在Cluster環(huán)境下設(shè)置Session復(fù)制(優(yōu)先使用內(nèi)存復(fù)制),在保證應(yīng)用正常運(yùn)行的情況下,設(shè)置較短的Session超時(shí)時(shí)間。同時(shí)生產(chǎn)環(huán)境下無(wú)需檢查Jsp和servlet:JSPPage Check Secs和Servlet Reload Check Secs均設(shè)為-1,關(guān)閉JSPKeep Generated和JSPVerbose對(duì)性能也有幫助。此外,還可以對(duì)jsp進(jìn)行預(yù)編譯,有兩種方法:激活precompile選項(xiàng);使用weblogic.appc事先編譯,建議采用后者。2.5 JMS調(diào)優(yōu)1.增加-Dweblogic.JMSThrea

39、dPoolSize=n(至少為5),以提高處理JMS的線(xiàn)程數(shù),在jRockit上增加-XXenablefatspin以減少加鎖沖突;2.采用文件存儲(chǔ)策略,將同步寫(xiě)策略設(shè)置為Direct-Write,同時(shí)在windows平臺(tái)上啟用磁盤(pán)寫(xiě)入緩存;3.使用分布式目的地時(shí),激活連接工廠(chǎng)Load Balancing Enabled,Server Affinity Enabled;4.為減少服務(wù)器不必要的JMS請(qǐng)求路由,如果多個(gè)目的地之間存在事務(wù),則部署在同一JMS服務(wù)器上,盡量將連接工廠(chǎng)部署到JMS服務(wù)器所在的WebLogic實(shí)例上,集群環(huán)境下,則最好將連接工廠(chǎng)部署到集群中的所有服務(wù)器上,而集群中每個(gè)J

40、MS服務(wù)器和目的地成員盡量使用類(lèi)似的設(shè)置;5.啟用消息分頁(yè)存儲(chǔ)功能,以釋放內(nèi)存,可以為JMS服務(wù)器和目的地設(shè)置,激活Messages Paging Enabled和Bytes Paging Enabled,同時(shí)使用限額防止服務(wù)器耗盡接收消息的所有可用內(nèi)存空間;6.在運(yùn)行WebLogic Server進(jìn)程之外的生產(chǎn)者務(wù)必使用流控制,并增大Send Timeout;7.將JMS Server Expiration Scan Interval設(shè)很大的值,能禁止主動(dòng)掃描過(guò)期消息;8.使用FIFO或者LIFO方式處理目的地消息;9.MDB的max-beans-in-free-pool不應(yīng)大于最大MDB線(xiàn)

41、程數(shù)(默認(rèn)線(xiàn)程數(shù)/2+1)。2.6 EJB調(diào)優(yōu)2.6.1調(diào)整pool和cache initial-beans-in-free-pool定義SLSB啟動(dòng)時(shí)實(shí)例的個(gè)數(shù),默認(rèn)為0,可以調(diào)大到正常并發(fā)數(shù)的大小,以減少初始響應(yīng)時(shí)間。max-beans-in-free-pool為最大個(gè)數(shù),默認(rèn)1000對(duì)SLSB來(lái)說(shuō),在頻繁創(chuàng)建和刪除實(shí)例的情況下很有幫助,一般不用調(diào)整,至少設(shè)為默認(rèn)線(xiàn)程數(shù),過(guò)大容易造成內(nèi)存溢出。而對(duì)Entity Bean來(lái)說(shuō),由于是匿名的,所以當(dāng)頻繁使用finder、home和create方法時(shí)可以調(diào)大。對(duì)SFSB來(lái)說(shuō),盡量將max-beans-in-cache參數(shù)設(shè)置得足夠的大,以滿(mǎn)足Be

42、an實(shí)例對(duì)最大并發(fā)用戶(hù)數(shù)的要求,可以避免有狀態(tài)會(huì)話(huà)Bean過(guò)多的鈍化行為。而idle-timeout-seconds盡量設(shè)置小,如果SFSB不用于存儲(chǔ)Web應(yīng)用會(huì)話(huà)狀態(tài)可以設(shè)置為0。對(duì)于Entity Bean來(lái)說(shuō),max-beans-in-cache同樣可以首先采用默認(rèn)值1000,監(jiān)控實(shí)例緩存和鈍化的情況,再做適當(dāng)調(diào)整。并行策略concurrency-strategy定義了實(shí)體Bean如何管理鎖,有四種策略:Exclusive、Databse、ReadOnly、Optimistic。效率依次提高,可靠性依次降低,盡量避免使用互斥策略,如果Bean無(wú)需更新操作,使用只讀策略,更甚的是,如果Bea

43、n的內(nèi)容不會(huì)改變,可設(shè)置read-timeout-seconds為0,樂(lè)觀(guān)并行策略時(shí)采用事務(wù)間緩存策略,在entity-cache描述符中將cache-between-transactions元素設(shè)為true。2.6.2優(yōu)化事務(wù)隔離級(jí)別和事務(wù)屬性對(duì)EJB組件來(lái)說(shuō),有四種事務(wù)隔離水平:TRANSACTION-SERIALIZABLE:在處理完成之前拒絕其他處理的讀入、可擴(kuò)展性或插入數(shù)據(jù)操作;TRANSACTION-REPEATABLE-READ:防止處理修改正在被其他處理調(diào)用的數(shù)據(jù);TRANSACTOIN-READ-COMMITTED:防止對(duì)正在被其他處理修改的數(shù)據(jù)執(zhí)行寫(xiě)鎖定;TRANSACTI

44、ON-READ-UNCOMMITTED:允許處理讀入未受權(quán)的數(shù)據(jù)以及允許在向結(jié)果中添加記錄時(shí)可以忽略處理。以上隔離水平依次降低,效率和性能依次提高。因此,建議選用滿(mǎn)足在業(yè)務(wù)數(shù)據(jù)完整性要求前提下水平最低的隔離級(jí)別。對(duì)于事務(wù)屬性的設(shè)置也是如此,對(duì)于刪除、修改和插入操作設(shè)置為Required,而對(duì)于只讀操作設(shè)置為Supports或者NotSupports。2.6.3其他一些小技巧1.利用finders-load-bean的默認(rèn)值true,既可以避免"n+1"的查詢(xún)問(wèn)題,又可以提高系統(tǒng)的性能;2.使用delay-updates-until-end-of-tx參數(shù)的默認(rèn)值true,除

45、非應(yīng)用程序?qū)δ承┳兓刑貏e的要求;3.應(yīng)用程序在每個(gè)業(yè)務(wù)方法調(diào)用后不需要進(jìn)行存在性檢查,將check-exists-on-method設(shè)定為false,以提高程序的性能;4.同一應(yīng)用內(nèi),將enable-call-by-reference設(shè)置為true;5.reentrant設(shè)置為false,避免事先加載子數(shù)據(jù)。第三章數(shù)據(jù)庫(kù)調(diào)優(yōu)(目錄)3.1.1 Oracle性能優(yōu)化Oracle9i的性能優(yōu)化除了調(diào)整kernal之外就是主要對(duì)Oracle啟動(dòng)文件的調(diào)整,即調(diào)整SGA的參數(shù)。注意,不同操作系統(tǒng)不同位數(shù)的機(jī)器最優(yōu)的參數(shù)不是一樣的,這里主要有windows和unix之分,32位和64位之分。首先需要調(diào)

46、大進(jìn)程數(shù)和游標(biāo)數(shù),一般默認(rèn)的值對(duì)實(shí)際應(yīng)用來(lái)說(shuō)都比較小,比如說(shuō),進(jìn)程數(shù)可以調(diào)到300,游標(biāo)數(shù)可以調(diào)到500。其次,看一個(gè)經(jīng)驗(yàn)公式:OS使用內(nèi)存+SGA+session*(sort_area_size+hash_area_size+2M)0然后,SGA內(nèi)參數(shù)設(shè)置的基本原則是:data buffer通??梢员M可能的大,shared_pool_size要適度,log_buffer通常大到幾百K到1M就差不多。具體的:data buffer 1G內(nèi)存可以設(shè)置500M,2G設(shè)為1.2G,8G可設(shè)為5G。shared_pool_size不易過(guò)大,通常應(yīng)該控制在200M-300M,如果使用了大量的存儲(chǔ)過(guò)程,可

47、以根據(jù)SGA的值增大到500M,如果增大后命中率得不到提高,則增加是無(wú)益的。具體的:1G內(nèi)存可以設(shè)置100M,2G設(shè)為150M,8G可設(shè)為300M。如不使用Java,java_pool_size 10-20M即可。large_pool_size如果不設(shè)置MTS,在20M-30M即可,假如設(shè)置MTS,可以考慮為session*(sort_area_size+2M)。最后,關(guān)于內(nèi)存的設(shè)置可根據(jù)statspack信息和v$system_event,v$sysstat,v$sesstat,v$latch等view信息來(lái)考慮微調(diào)。3.1.2 Oracle的其他調(diào)整為了Oracle高效率的運(yùn)行,除了上面提

48、到的內(nèi)存因素之外,還有就是需要良好的數(shù)據(jù)庫(kù)設(shè)計(jì):表、視圖、索引和日志的合理規(guī)劃和建立。I/O的性能也是重要因素,應(yīng)盡量減少頁(yè)交換和頁(yè)分配。此外,就是改善檢查點(diǎn)的效率。第四章操作系統(tǒng)調(diào)優(yōu)(目錄)4.1操作系統(tǒng)調(diào)整操作系統(tǒng)影響應(yīng)用程序運(yùn)行性能的因素主要有:硬件的配置(CPU、內(nèi)存、硬盤(pán)等),核心參數(shù),TCP/IP參數(shù)以及補(bǔ)丁的情況等。這里對(duì)操作系統(tǒng)的優(yōu)化,除了更新最新的補(bǔ)丁程序以保證應(yīng)用程序正常運(yùn)行之外,就是調(diào)整TCP/IP參數(shù),文件描述符,對(duì)于個(gè)別操作系統(tǒng)還有其他特別的參數(shù)調(diào)整。下面將依次介紹不同操作系統(tǒng)的情況,更多的信息請(qǐng)參考各操作系統(tǒng)的文檔。4.1.1 HP-UX對(duì)于HP-UX,你首先需要安

49、裝Java Patch:然后需要確認(rèn)下面文檔中的核心參數(shù)是否滿(mǎn)足(可以使用sam命令修改核心參數(shù)):。調(diào)整TCP參數(shù):ndd-set/dev/tcp tcp_conn_req_max 1024,將偵聽(tīng)隊(duì)列的最大允許長(zhǎng)度調(diào)整到1024。有時(shí)操作系統(tǒng)限制進(jìn)程使用的最大內(nèi)存數(shù)小于你要配置的內(nèi)存大小,則需要調(diào)整該值。讀者可以從了解更多的HP-UX調(diào)整建議。4.1.2 Solaris調(diào)整TCP的參數(shù),等待時(shí)間間隔tcp-time-wait-interval建議設(shè)置為60000ms:/usr/sbin/ndd?set/dev/tcp tcp_time_wait_interval 60000;其他參數(shù)調(diào)整如

50、下:tcp_xmit_hiwat/tcp_recv_hiwat 131072 tcp_conn_req_max_q/tcp_conn_req_max_q0 16384調(diào)整一個(gè)進(jìn)程打開(kāi)的文件描述符的數(shù)量:軟限制和硬限制以及散列表的大小,修改/etc/system文件:set tcp:tcp_conn_hash_size=32768 set rlim_fd_cur=8192 set rlim_fd_max=8192更多的調(diào)整信息請(qǐng)查閱:。4.1.3 AIX AIX用no命令調(diào)整TCP參數(shù),等待時(shí)間間隔tcp_timewait:no-o tcp_timewait=4,將tcp.timewait參數(shù)設(shè)

51、置為4個(gè)15秒間隔,即1分鐘。運(yùn)行no-a命令將顯示網(wǎng)絡(luò)當(dāng)前的所有屬性值。由于UDP_SENDSPACE默認(rèn)的緩存大小是8k,為減少I(mǎi)/O異常,需調(diào)整為32k:no-o udp_sendspace=32768。此外,當(dāng)WebLogic HTTP請(qǐng)求忙時(shí),可以調(diào)整偵聽(tīng)隊(duì)列的最大長(zhǎng)somaxconn到8192(默認(rèn)值是1024)。更多信息:。4.1.4 Linux調(diào)整Linux系統(tǒng)使用sysctl命令修改TCP參數(shù)等待時(shí)間間隔:sysctl-w ip_ct_tcp_timeout_time_wait=60;調(diào)整打開(kāi)文件的最大數(shù):在/etc/sysctl.conf文件中,添加:Fs.file-max

52、=65535,然后運(yùn)行sysctl-p;調(diào)整打開(kāi)文件描述符最大數(shù)為8192:在/etc/security/limits.conf文件,添加:WebLogic hard nofile 8192(僅針對(duì)WebLogic用戶(hù)),然后在WebLogic啟動(dòng)文件里運(yùn)行ulimit-n 8192激活設(shè)置。更多信息請(qǐng)查閱:。4.1.5 Windows Windows系統(tǒng)的調(diào)整通過(guò)修改注冊(cè)表HKEY-LOCAL-MACHINESYSTEMCurrent ControlSetServices文件夾來(lái)完成??梢哉{(diào)整TcpipParameters子文件夾中的等待時(shí)間間隔時(shí)間TcpTimedWaitDelay參數(shù)的值

53、。偵聽(tīng)隊(duì)列最大長(zhǎng)度的默認(rèn)值為15,為修改它,可在InetinfoParameters子目錄中創(chuàng)建DWORD條目ListenBackLog。此外,Windows2000的Service Pack(要求sp3以上)也會(huì)影響系統(tǒng)穩(wěn)定性:。第五章性能監(jiān)控和性能分析(目錄)5.1性能瓶頸最后,介紹一下實(shí)際分析J2EE應(yīng)用性能的常用命令和工具。對(duì)于實(shí)現(xiàn)一個(gè)高性能的J2EE應(yīng)用來(lái)說(shuō),掌握了J2EE調(diào)優(yōu)的理論經(jīng)驗(yàn)還是不夠的。掌握性能監(jiān)控,發(fā)現(xiàn)瓶頸和問(wèn)題診斷才是保證J2EE系統(tǒng)持續(xù)高效運(yùn)行的關(guān)鍵。瓶頸指的是限值所有吞吐操作以及嚴(yán)重影響反應(yīng)時(shí)間的系統(tǒng)內(nèi)資源。在分布式系統(tǒng)內(nèi)尋找并糾正瓶頸是非常困難的,需要有經(jīng)驗(yàn)的團(tuán)

54、隊(duì)來(lái)解決。瓶頸會(huì)發(fā)生在Web服務(wù)器上,程序代碼中,應(yīng)用服務(wù)器上,數(shù)據(jù)庫(kù),操作系統(tǒng)或者網(wǎng)絡(luò),硬件上。經(jīng)驗(yàn)表明,瓶頸很容易發(fā)生在如下地方:數(shù)據(jù)庫(kù)連接與隊(duì)列中;應(yīng)用服務(wù)器的程序代碼中;應(yīng)用服務(wù)器和Web服務(wù)器硬件上;網(wǎng)絡(luò)和TCP配置中。實(shí)際中可以著力對(duì)這些環(huán)節(jié)進(jìn)行監(jiān)控。5.2操作系統(tǒng)監(jiān)控操作系統(tǒng)層面的性能監(jiān)控主要是對(duì)內(nèi)存、CPU、I/O和交換區(qū)的使用情況進(jìn)行監(jiān)控分析。windows平臺(tái)可以通過(guò)任務(wù)管理器和perfmon工具查看。如果是unix系統(tǒng)可以使用stat系列命令(vmstat,mpstat,iostat)監(jiān)控內(nèi)存、CPU和I/O的即時(shí)變化,使用swap命令查看交換區(qū)的使用情況。如果操作系統(tǒng)安

55、裝了top、topas、glance等使用工具,則使用top、topas、glance將能更為方便地看到WebLogic進(jìn)程對(duì)操作系統(tǒng)的內(nèi)存,CPU和I/O資源使用的即時(shí)變化情況。而網(wǎng)絡(luò)方面的性能可以通過(guò)ping和netstat等命令來(lái)監(jiān)控,主要幾個(gè)關(guān)鍵的網(wǎng)絡(luò)統(tǒng)計(jì)值,如數(shù)據(jù)包再發(fā)送、重復(fù)數(shù)據(jù)包和數(shù)據(jù)包偵聽(tīng)丟失。說(shuō)明:本文提到的unix命令并非適用所有操作系統(tǒng),僅供參考。5.3數(shù)據(jù)庫(kù)監(jiān)控?cái)?shù)據(jù)庫(kù)層面的監(jiān)控這里為oracle9i為例來(lái)說(shuō)明,可以采用oracle自帶的工具Oracle Interprise Manager Console來(lái)監(jiān)控session和sql的執(zhí)行情況。還有其他專(zhuān)業(yè)的數(shù)據(jù)庫(kù)監(jiān)控工

56、具可以使用,比如QUEST的spotlight(可以非常形象和直觀(guān)地對(duì)Oracle數(shù)據(jù)庫(kù)的CPU、內(nèi)存、I/O、Data Buffer Size、Shared Pool Size、Redo Buffer等參數(shù)進(jìn)行即時(shí)監(jiān)控,并自動(dòng)對(duì)不正常的參數(shù)以紅色顯示。5.4 WebLogic監(jiān)控5.4.1 JVM監(jiān)控采用java參數(shù)-verbose:gc來(lái)分析JVM的GC非常繁瑣,而且不直觀(guān)。使用-Xloggc:gc.log參數(shù)將GC日志寫(xiě)入文件,采用GC工具HPjtune(進(jìn)行分析,可以輕松看出當(dāng)前jvm參數(shù)配置是否合理。嚴(yán)格意義上來(lái)說(shuō)HPjtune是一個(gè)分析工具,不是監(jiān)控工具。這里不得不提及jRocke

57、t,Intel平臺(tái)上最快的JVM,在WebLogic啟動(dòng)命令中增加-Xmanagement參數(shù),就可以執(zhí)行beajrockit81sp3_142_04 in下console命令監(jiān)控WebLogic的內(nèi)存使用和CPU負(fù)載情況。設(shè)置Tools/Preferences菜單中的Mode of operation屬性為developer,jRocket將提供Method Profiler工具,她能夠?qū)⑺性贘Rockit Java虛擬機(jī)上執(zhí)行的成員方法的調(diào)用次數(shù)、執(zhí)行的總時(shí)間和每次調(diào)用的執(zhí)行時(shí)間都統(tǒng)計(jì)出來(lái),進(jìn)行代碼級(jí)調(diào)優(yōu),這是jRockit的又一大優(yōu)勢(shì)。5.4.2 Console監(jiān)控WebLogic C

58、onsole除了管理配置功能之外,提供了豐富的監(jiān)控功能。通過(guò)WebLogic Console,首先我們可以查看服務(wù)器的運(yùn)行情況。 Server監(jiān)控通過(guò)使用服務(wù)器的Performance Monitoring選項(xiàng)卡,可以查看到請(qǐng)求吞吐量,執(zhí)行隊(duì)列積壓情況以及JVM棧利用情況。而通過(guò)點(diǎn)擊Performance Genaral選項(xiàng)卡中"Monitor all Active Queues."可以查看所以執(zhí)行線(xiàn)程的當(dāng)前統(tǒng)計(jì)數(shù)據(jù)。此外Monitoring選項(xiàng)卡還可以監(jiān)控JTA和JMS等Service的情況。 JDBC監(jiān)控在連接池Monitoring選項(xiàng)卡中,WebLogic Console為每一個(gè)數(shù)據(jù)庫(kù)連接池提供了實(shí)時(shí)統(tǒng)計(jì)信息。其中有三個(gè)重要參數(shù)可以反應(yīng)WebLogic Server的健康狀況:Connections High、Wait Second High和Waiters High。C

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論