版權(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)攻略 隨著近來(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)有必要的操作
2、1.1.3 使用合適的類(lèi)型1.1.4 盡量使用pool,buffer和cache1.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 Bean1.5
3、.5 其他的一些小技巧第二章 應(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和cache2.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
4、 操作系統(tǒng)調(diào)整4.1.1 HP-UX4.1.2 Solaris4.1.3 AIX4.1.4 Linux4.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
5、 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)積累分享給大家,拋磚引玉。本文從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ì)
6、代碼進(jìn)行檢查.實(shí)際上,我們應(yīng)當(dāng)將代碼級(jí)的調(diào)優(yōu)放在應(yīng)用設(shè)計(jì)時(shí)來(lái)做,測(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í)。異常拋
7、出對(duì)性能不利。拋出異常首先要?jiǎng)?chuàng)建一個(gè)新的對(duì)象。Throwable接口的構(gòu)造函數(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)
8、算時(shí),強(qiáng)烈建議使用StringBuffer。在做String匹配時(shí)使用intern()代替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ù)情況下
9、選擇前者。1.1.4 盡量使用pool,buffer和cache使用pool、buffer和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)換
10、。而后面講到的JDBC、JSP、EJB和JMS我們都非常建議使用buffer和cache。為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ù)上獲
11、取數(shù)據(jù)源并緩存,得到連接,并提供一系列關(guān)閉數(shù)據(jù)庫(kù)資源的方法。對(duì)任何資源使用的原則是用完即關(guān),不管是數(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 connectionpstmt =conn.prepareStatement(strSql1);pstmt.executeUpdate();pstmt.close();pstmt =conn.prepareStat
12、ement(strSql2);rs=pstmt.executeQuery();while (rs.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è)置記錄
13、集讀取緩存FetchSize和設(shè)置記錄集讀取方向FetchDirection對(duì)性能也有一定的提高。1.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ù),因此
14、,數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序不必再執(zhí)行轉(zhuǎn)換過(guò)程。1.3 Web代碼調(diào)優(yōu)1.3.1 HttpSession的使用應(yīng)用服務(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指令:例如<% in
15、clude file="copyright.html" %>,該指令在編譯時(shí)引入指定的資源。在編譯之前,帶有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
16、 session="false"%> ;盡量不要將JSP頁(yè)面定義為單線(xiàn)程,應(yīng)設(shè)置為<%page isThreadSafe=”true”%>在JSP頁(yè)面最好使用輸出緩存功能,如: <%page 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è)置 HttpServletRespons
17、e 緩沖區(qū),如:response.setBufferSize(20000);在init()方法里緩存靜態(tài)數(shù)據(jù),而在destroy()中釋放它;建議在 Servlet里使用ServletOutputStream輸出圖片等對(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
18、或者between 等,使用字符串?dāng)?shù)據(jù)類(lèi)型的速度最慢;務(wù)必為特定的應(yīng)用程序定義特定的JMS連接工廠(chǎng),并且禁用默認(rèn)的JMS連接工廠(chǎng);不要在javax.*與 weblogic.*的名字空間中使用JNDI名稱(chēng);盡量使用異步消費(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)者、消
19、費(fèi)者和目的地并置在同一WebLogic Server內(nèi)部,通常不使用壓縮。WebLogic特有的XMLMessage能為運(yùn)行于消息主體之上的消息選擇器提供內(nèi)嵌式支持,而且易于數(shù)據(jù)交換。因此,建議應(yīng)用程序之間傳送消息使用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
20、事務(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ì)模式為我們實(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 Trans
21、fer Object等設(shè)計(jì)模式更是為我們提供設(shè)計(jì)典范:緩存對(duì)EJBHome的訪(fǎng)問(wèn);使用門(mén)面模式,不暴露Entity Bean,用Session Bean封裝Entity Bean;如果可以異步處理,則用MDB代替Session 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è)Applicat
22、ion中使用本地接口,對(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);使用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ù);WebL
23、ogic提供了為CMP動(dòng)態(tài)查詢(xún)和批量插入功能,對(duì)性能也有很大幫助。1.5.3 緩存資源對(duì)SLSB或者M(jìn)DB來(lái)說(shuō),使用setMesssageDrivenContext()或者ejbCreate()方法緩存特定資源,在ejbRemove()方法里釋放; 對(duì)SLSB或者M(jìn)DB來(lái)說(shuō),使用setSessionContext()或者ejbCreate()方法緩存特定資源,在ejbRemove()方法里釋放;對(duì)Entity Bean來(lái)說(shuō),使用setEntityContext ()方法緩存特定資源,在unSetEntityContext ()方法里釋放。1.5.4 如何選擇和使用Entity Bean1. 在
24、設(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;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屬
25、性,根據(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.SessionSynchronization 接口,提供在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
26、. 使用多讀模式。第二章 應(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頻度低,速度慢。堆越小,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)用程序占用之外的
27、內(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)程的允許最大內(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 JI
28、T引擎為-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ú)疑大大提高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, genco
29、n以及parallel。為得到更好的響應(yīng)性能,應(yīng)該使用并發(fā)垃圾回收器:-Xgc:gencon,可使用-Xms和-Xmx設(shè)置堆棧的初始大小和最大值,要設(shè)置護(hù)理域-Xns為-Xmx的10%。而如果要得到更好的性能,應(yīng)該選用并行垃圾回收器:-Xgc: parallel,由于并行垃圾回收器不使用nursery,不必設(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ì)了
30、解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ù)處理環(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有兩套
31、套接字復(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套接字復(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)
32、度機(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)行調(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 Incre
33、ase設(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 Backlog 25%直到連接拒絕錯(cuò)誤消失。對(duì)于Portal類(lèi)型的應(yīng)用,默認(rèn)值往往是不夠的。Login Timeout和SSL Login Timeout參數(shù)表示普通連接和SSL連接的超時(shí)時(shí)間,如果客戶(hù)連接被服務(wù)器中斷或者SSL容量大,可以嘗試增加該值。這些參數(shù)可以在Console Se
34、rver 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 Queue選項(xiàng)中的Configure a new Excute Queue鏈接即可定制新的執(zhí)行隊(duì)列。創(chuàng)建新的執(zhí)行隊(duì)列后,用戶(hù)需要為應(yīng)用程序的J2EE組件配置分配策略,以便它可以找到新的隊(duì)列。舉個(gè)例子:要將 servlet或jsp捆綁到一個(gè)特定的執(zhí)行隊(duì)列,必須替換web.xml文件
35、項(xiàng),將wl-dispatch-policy初始化參數(shù)設(shè)置為自己的執(zhí)行隊(duì)列名。servletname/directoryname/deployment.jspwl-dispatch-policyNewExecuteQueueName我們可以為一個(gè)jsp或者servlet乃至一個(gè)WEB應(yīng)用設(shè)置自己的執(zhí)行隊(duì)列。同時(shí)也可以為EJB設(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è)連接,所
36、以連接數(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。在保證數(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í),你
37、需要將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)定,時(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ì)將
38、得到彌補(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)閉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
39、和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.JMSThreadPoolSize=n(至少為5),以提高處理JMS的線(xiàn)程數(shù),在jRockit上增加-XXenablefatspin以減少加鎖沖突;2. 采用文件存儲(chǔ)策略,將同步寫(xiě)策略設(shè)置為Direct-Write,同時(shí)在windows平臺(tái)上啟用磁盤(pán)寫(xiě)入緩存;3. 使用分布式目的
40、地時(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è)JMS服務(wù)器和目的地成員盡量使用類(lèi)似的設(shè)置;5. 啟用消息分頁(yè)存儲(chǔ)功能,以釋放內(nèi)存,可以為JMS服務(wù)器和目的地設(shè)置, 激活Messages Paging Enabled和Bytes Paging Enabled,同時(shí)使用限額防止服務(wù)器耗盡接收消息的所有可用
41、內(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)程數(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-be
42、ans-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)足Bean實(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-bean
43、s-in-cache同樣可以首先采用默認(rèn)值1000,監(jiān)控實(shí)例緩存和鈍化的情況,再做適當(dāng)調(diào)整。并行策略concurrency-strategy定義了實(shí)體Bean如何管理鎖,有四種策略: Exclusive、Databse、ReadOnly、Optimistic。效率依次提高,可靠性依次降低,盡量避免使用互斥策略,如果Bean無(wú)需更新操作,使用只讀策略,更甚的是,如果Bean的內(nèi)容不會(huì)改變,可設(shè)置read-timeout-seconds為0,樂(lè)觀并行策略時(shí)采用事務(wù)間緩存策略,在entity-cache描述符中將cache-between-transactions元素設(shè)為true。2.6.2 優(yōu)化事
44、務(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ě)鎖定; TRANSACTION-READ-UNCOMMITTED:允許處理讀入未受權(quán)的數(shù)據(jù)以及允許在向結(jié)果中添加記錄時(shí)可以忽略處理。 以上隔離水平依次降低,效率和性能依次提高。因此,建議選用滿(mǎn)足在業(yè)務(wù)數(shù)據(jù)完整性要求前提下水平最低的隔離級(jí)別。對(duì)于事
45、務(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,除非應(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-refe
46、rence設(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)大進(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
47、_area_size +2M)<0.7RAM,通常認(rèn)為此時(shí)的SGA比較合理。這里sort_area_size為64k, hash_area_size為128k(當(dāng)排序多的時(shí)候需要增大sort_area_size,按調(diào)整后的值計(jì)算),session表示最大并發(fā)進(jìn)程數(shù),假設(shè)100個(gè)。假如1G內(nèi)存的機(jī)器,OS占用200M,PGA占用200M左右,那么SGA可以設(shè)為400-500M,如果2G內(nèi)存可以1G給 SGA,8G可以5G給SGA。不過(guò)對(duì)于32位數(shù)據(jù)庫(kù)來(lái)說(shuō),通常最多只能使用1.7G內(nèi)存。然后,SGA內(nèi)參數(shù)設(shè)置的基本原則是:data buffer 通??梢员M可能的大,shared_pool_s
48、ize 要適度,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ò)程,可以根據(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
49、 * (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)行,除了上面提到的內(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
50、參數(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,你首先需要安裝Java Patch:調(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)整該值。讀者可以從4.1.2 Solaris調(diào)整TCP的參數(shù),等待時(shí)間間隔t
51、cp-time-wait-interval建議設(shè)置為60000ms: /usr/sbin/ndd ?set /dev/tcp tcp_time_wait_interval 60000;其他參數(shù)調(diào)整如下:tcp_xmit_hiwat/tcp_recv_hiwat 131072tcp_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=32768set rlim_fd_cur=8192set rlim_fd_max=8
52、192更多的調(diào)整信息請(qǐng)查閱: 4.1.3 AIXAIX用no命令調(diào)整TCP參數(shù),等待時(shí)間間隔tcp_timewait: no -o tcp_timewait=4,將tcp.timewait參數(shù)設(shè)置為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命令修
53、改TCP參數(shù)等待時(shí)間間隔:sysctl -w ip_ct_tcp_timeout_time_wait=60;調(diào)整打開(kāi)文件的最大數(shù):在/etc/sysctl.conf文件中,添加: Fs.file-max=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)查閱:http:/ipsysctl-4.1.5 WindowsWindows系統(tǒng)的調(diào)整通過(guò)修
54、改注冊(cè)表HKEY-LOCAL-MACHINESYSTEMCurrent ControlSetServices文件夾來(lái)完成。可以調(diào)整TcpipParameters子文件夾中的等待時(shí)間間隔時(shí)間 TcpTimedWaitDelay參數(shù)的值。偵聽(tīng)隊(duì)列最大長(zhǎng)度的默認(rèn)值為15,為修改它,可在InetinfoParameters子目錄中創(chuàng)建 DWORD條目ListenBackLog。此外,Windows2000的Service Pack(要求sp3以上)也會(huì)影響系統(tǒng)穩(wěn)定性: http:/e-第五章 性能監(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)尋找
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年非全日制用工協(xié)議模板解析
- 2024網(wǎng)絡(luò)通信設(shè)備買(mǎi)賣(mài)協(xié)議指導(dǎo)
- 2024年新款高強(qiáng)度圍墻護(hù)欄銷(xiāo)售協(xié)議
- 2024銀行股權(quán)質(zhì)押借款協(xié)議模板
- 2024年化圍欄施工協(xié)議范例
- 2024年門(mén)面房使用權(quán)轉(zhuǎn)租協(xié)議樣式
- DB11∕T 1708-2019 施工工地?fù)P塵視頻監(jiān)控和數(shù)據(jù)傳輸技術(shù)規(guī)范
- 2024年度酒店早餐外判協(xié)議示例
- 2024城區(qū)鼠害防治協(xié)議范本
- 2024年企業(yè)員工勞動(dòng)協(xié)議條款細(xì)則
- 嵌入式課程設(shè)計(jì)實(shí)訓(xùn)
- 第三單元綜合卷-2024-2025學(xué)年統(tǒng)編版語(yǔ)文五年級(jí)上冊(cè)
- 土方開(kāi)挖和回填專(zhuān)項(xiàng)施工方案
- 中型直升機(jī)交易協(xié)議(2024年)版
- 專(zhuān)題08 向量的運(yùn)算(上海中考特色題型)30題(解析版)
- 2024市場(chǎng)營(yíng)銷(xiāo)知識(shí)競(jìng)賽題庫(kù)(試題及答案169題)
- 四級(jí)勞動(dòng)關(guān)系協(xié)調(diào)員題庫(kù)+答案
- 2024年銀行外匯業(yè)務(wù)知識(shí)理論考試題庫(kù)及答案(含各題型)
- 2022年高考數(shù)學(xué)試卷(上海)(春考)(解析卷)
- 古代小說(shuō)戲曲專(zhuān)題-形考任務(wù)4-國(guó)開(kāi)-參考資料
- 2-1、職業(yè)生涯規(guī)劃概述
評(píng)論
0/150
提交評(píng)論