Java-Android-jwebee
          Java-Android-jwebee
          對(duì)IT人來(lái)說(shuō),要成為一個(gè)優(yōu)秀的技術(shù)型管理者,除了需要具備扎實(shí)的技術(shù)基礎(chǔ)之外,還應(yīng)該培養(yǎng)良好的人際關(guān)系能力、談判與溝通技能、客戶關(guān)系與咨詢技能、商業(yè)頭腦和財(cái)務(wù)技能以及創(chuàng)新意識(shí),此外還要有巧妙的激勵(lì)技巧和化解沖突與解決突發(fā)問(wèn)題的能力.
          優(yōu)化 WebLogic 服務(wù)器性能參數(shù)
          WebLogic 配置文件(config.xml)包含了大量很直觀的與性能有關(guān)的參數(shù),能通過(guò)配置環(huán)境與應(yīng)用程序得到很好的優(yōu)化。基于系統(tǒng)的需要調(diào)整這些參數(shù)不僅能改善單個(gè)點(diǎn)的性能,而且能提高整個(gè)應(yīng)用程序性能的可衡量性。
          試著采用下列WebLogic配置方法,或許能使你的系統(tǒng)達(dá)到最佳狀態(tài):
          一 修改運(yùn)行隊(duì)列線程數(shù)的值。在WebLogic 中隊(duì)列元素的線程數(shù)等于同時(shí)占用運(yùn)行隊(duì)列的應(yīng)用程序的數(shù)目。當(dāng)任務(wù)加入一個(gè)WebLogic 實(shí)例,它就被放到執(zhí)行隊(duì)列中,然后分配給任務(wù)一個(gè)線程來(lái)運(yùn)行。線程消耗資源,因此要小心處理這個(gè)屬性——增加不需要的值,會(huì)降低性能。
          二,如果可能,使用自帶的性能包(NativeIOEnabled=true)。
          三,使用特定的應(yīng)用程序執(zhí)行隊(duì)列。
          四,使用JDBC連接池時(shí),修改下列屬性:
          n???????? 驅(qū)動(dòng)名稱:使用小的驅(qū)動(dòng)或者jDriver。
          n???????? 初始容量:設(shè)為與最大容量相同的值。
          n???????? 最大容量:其值至少應(yīng)與線程數(shù)相同。
          五,把連接池的大小設(shè)為與執(zhí)行隊(duì)列的線程數(shù)相同。
          六,設(shè)置緩沖。
          七,為Servlet和JSP使用多個(gè)執(zhí)行隊(duì)列。
          八,改變JSP默認(rèn)的Java編譯器,javac 比jikes或sj要慢。
          ?
          優(yōu)化 WebLogic
          提要:
          n ???????? WebLogic 啟動(dòng)設(shè)置 Java 參數(shù)。
          n ???????? 設(shè)置與性能有關(guān)的配置參數(shù)。
          n ???????? 調(diào)整開(kāi)發(fā)與產(chǎn)品模式默認(rèn)值。
          n ???????? 使用 WebLogic “自有的 IO ”性能包。
          n ???????? 優(yōu)化默認(rèn)執(zhí)行隊(duì)列線程。
          n ???????? 優(yōu)化連接緩存。
          n ???????? 如何提高 JDBC 連接池的性能。
          n ???????? 設(shè)置 Java 編譯器。
          n ???????? 使用 WebLogic 集群提高性能。
          n ???????? 監(jiān)視 WebLogic 域。
          一、為 WebLogic 啟動(dòng)設(shè)置 Java 參數(shù)
          只要啟動(dòng) WebLogic ,就必須指定 Java 參數(shù),簡(jiǎn)單來(lái)說(shuō),通過(guò) WebLogic.Server 域的命令行就可以完成,不過(guò),由于這樣啟動(dòng)的過(guò)程冗長(zhǎng)并且易于出錯(cuò), BEA 公司推薦你把這個(gè)命令寫進(jìn)腳本里。為了簡(jiǎn)化這個(gè)過(guò)程,你可以修改樣例腳本里的默認(rèn)值,樣例腳本是提供 WebLogic 啟動(dòng)服務(wù)器的。
          如果你用配置向?qū)?chuàng)建你的域, WebLogic 啟動(dòng)腳本( startWebLogic.cmd )放在 domain-name 目錄里。默認(rèn)情況下,這個(gè)目錄是 BEA_HOME\user_projects\domain\domain-name BEA_HOME 表示安裝路徑, domain-name 是在配置模板中設(shè)置的域名稱。
          你需要在這個(gè)腳本中修改一些默認(rèn)的 Java 參數(shù)值,使之適合你的應(yīng)用環(huán)境和程序。在這個(gè)文件中主要的性能參數(shù)是 JAVA_HOME Java 堆的大小。
          n ???????? 設(shè) JAVA_HOME 的值為 JDK 所在的位置,如:
          set JAVA_HOME=C:\bea\jdk141_03
          n ???????? 為得到高性能的吞吐量,把 Java 堆的最小值與最大值設(shè)為相等。如:
          "%JAVA_HOME%\bin\java" -hotspot -Xms512m -Xmx512m -classpath %CLASSPATH% -
          二、設(shè)置與性能有關(guān)的配置參數(shù)
          在一個(gè) WebLogic 域中,配置文件( config.xml )位于與管理服務(wù)器通信的機(jī)器里,提供 WebLogic MBean 的長(zhǎng)期存儲(chǔ)。管理服務(wù)器作為連接的中心點(diǎn),為服務(wù)實(shí)例與系統(tǒng)管理工具提供服務(wù)。域也可以包括其他的 WebLogic 實(shí)例,稱之為從服務(wù),主要為應(yīng)用程序提供服務(wù)。
          當(dāng)啟動(dòng)管理服務(wù)器是,首先讀域配置文件,然后跳過(guò)建立在配置文件中管理 MBean 默認(rèn)的屬性值,每一次用系統(tǒng)管理工具(不管是命令行界面還是管理控制臺(tái))改變一個(gè)屬性值,它都會(huì)被存到相應(yīng)的管理 MBean ,并且寫進(jìn)配置文件。
          下表列出了 config.xml 文件中影響服務(wù)器性能的參數(shù)。
          元素
          屬性
          控制臺(tái)標(biāo)簽
          備注
          Server
          NativeIOEnabled
          Native IO Enabled
          ?
          ExecuteQueue
          ThreadCount
          Thread Count
          ?
          ExecuteQueue
          QueueLength
          QueueLengthThresholdPercent
          ThreadsIncrease
          ThreadsMaximum
          ThreadPriority
          Queue Length
          Queue Length Threshold Percent
          (隊(duì)列長(zhǎng)限度百分比)
          Threads Increase
          Threads Maximum
          Thread Priority
          ?
          Server
          StuckThreadMaxTime
          StuckThreadTimerInteral
          Stuck Thread Max Time
          (堵塞線程的最長(zhǎng)時(shí)間)
          Stuck Thread Timer Interval
          (堵塞線程的時(shí)間間隔)
          ?
          Server
          ThreadPoolPercentSocketReaders
          Socket Readers
          ?
          Server
          AcceptBacklog
          Accept Backlog
          (接受緩存數(shù))
          ?
          JDBCConnectionPool
          InitialCapacity
          MaxCapacity
          Initial Capacity
          Max Capacity
          ?
          JDBCConnectionPool
          StatementCacheSize
          Statement Cache Size
          (聲明高速緩沖大小)
          ?
          ?
          三、調(diào)整開(kāi)發(fā)模式與產(chǎn)品模式默認(rèn)值
          你可以指定域?yàn)殚_(kāi)發(fā)環(huán)境或?yàn)楫a(chǎn)品環(huán)境。 WebLogic 會(huì)根據(jù)你指定的環(huán)境類型使用不同的默認(rèn)值提供不同的服務(wù)。
          下表列出了兩種模式下的默認(rèn)值
          優(yōu)化參數(shù)
          開(kāi)發(fā)模式
          產(chǎn)品模式
          Execute Queue: ThreadCount
          15 threads
          25 threads
          JDBC Connection Pool: MaxCapacity
          15 connections
          25 connections
          3 1 更改運(yùn)行時(shí)模式
          在創(chuàng)建了一個(gè)域后,按下列步驟可以更改域里所有服務(wù)的的運(yùn)行時(shí)模式:
          ?
          1 .為更改運(yùn)行在一個(gè) WebLogic 主機(jī)上的所有域的運(yùn)行時(shí)模式,用文本編輯器打開(kāi) WL_HOME\common\bin\commEnv.cmd(Windows) 或者 WL_HOME\common\bin\commEnv.sh (UNIX) WL_HOME 是安裝 WebLogic 的路徑。
          為指定的域更改運(yùn)行時(shí)模式,就用文本編輯器打開(kāi) domain-name \StartWebLogic.cmd (Windows) or domain-name\StartWebLogic.sh (UNIX) domain-name 為創(chuàng)建的域的目錄。
          2 .在這個(gè)腳本中,更改 PRODUCTION_MODE 的值,如果你要服務(wù)器運(yùn)行在產(chǎn)品模式,指定其值為 TRUE
          3 .重啟所有的服務(wù)器。
          3 2 兩種模式的不同
          下表列出了開(kāi)發(fā)模式與產(chǎn)品模式幾種關(guān)鍵項(xiàng)的區(qū)別:
          功用名稱
          開(kāi)發(fā)模式
          產(chǎn)品模式
          SSL
          你可以使用 WebLogic 安全服務(wù)提供的驗(yàn)證數(shù)字證書。有這些證書,你開(kāi)發(fā)的應(yīng)用程序會(huì)在 SSL 保護(hù)的環(huán)境下運(yùn)行。
          如果你使用驗(yàn)證數(shù)字證書,會(huì)收到警告信息。
          部署應(yīng)用程序
          WEBLOGIC 實(shí)例會(huì)自動(dòng)部署和更新位于 domain_name/applications 目錄下的應(yīng)用程序( domain_name 為域的名稱)。
          不能使用自動(dòng)部署功能,必須使用 WebLogic 控制臺(tái)或者 WebLogiceblogic Deployer 工具。
          Log File Rotation
          啟動(dòng)服務(wù)器后,服務(wù)器自動(dòng)重命名本地日志文件為 server-name.log.n ,為了滯留的 session ,只要日志文件的達(dá)到 500kb ,日志文件就會(huì)滾轉(zhuǎn)一次。
          當(dāng)日志文件達(dá)到 500kb ,就會(huì)滾轉(zhuǎn)。
          Execute Queues
          默認(rèn)的執(zhí)行線程為 15
          ?
          默認(rèn)的執(zhí)行線程為 25
          JDBC Connection Pool Capacity
          默認(rèn)的容量為 15
          默認(rèn)的容量為 25
          四、使用WebLogic“自有的IO”性能包
          當(dāng)你使用自有的性能包,測(cè)試基準(zhǔn)就表明了主要性能的提高。性能包采用最優(yōu)化的平臺(tái)及多線程的 Socket 去提高服務(wù)器的性能。例如,本地 Socket 讀的多線程有自己的執(zhí)行隊(duì)列而不需要借用默認(rèn)的執(zhí)行隊(duì)列線程,這樣可以讓默認(rèn)執(zhí)行線程很從容去處理應(yīng)用程序。
          不過(guò),如果你一定要用純 Java socket 讀在主機(jī)上運(yùn)行,你仍然可以通過(guò)配置每個(gè)服務(wù)器實(shí)例和客戶機(jī)中適當(dāng)?shù)?/span> socket 讀的線程數(shù)量,來(lái)提高 socket 通信的性能。
          設(shè)置性能包的操作方法:
          默認(rèn)情況下,裝載在 config.xml 中的是自有的性能包。為了驗(yàn)證這個(gè)設(shè)置,在配置文件中檢查 NativeIOEnabled 屬性是否設(shè)為“ true ”( NativeIOEnabled=true )。
          你也可以通過(guò)管理控制臺(tái)來(lái)驗(yàn)證,步驟如下:
          1 ??? 啟動(dòng)管理服務(wù)器。
          2 ??? 訪問(wèn)管理控制臺(tái)。
          3 ??? 展開(kāi)左邊面板的 Servers 節(jié)點(diǎn),顯示域服務(wù)。
          4 ??? 點(diǎn)擊你要配置的服務(wù)實(shí)例。
          5 ??? 選擇 Configuration >Tuning tab
          6 ??? 如果 Enable Native IO 復(fù)選框沒(méi)有被選擇,選中即可。
          7 ??? 點(diǎn)擊 Apply
          8 ??? 重啟服務(wù)器。
          ?
          ?
          五、優(yōu)化默認(rèn)執(zhí)行隊(duì)列線程
          默認(rèn)情況下,一個(gè)新的 WebLogic 實(shí)例配置了一個(gè)開(kāi)發(fā)模式執(zhí)行隊(duì)列, weblogic.kernel.default, 它包含 15 個(gè)線程。另外, WebLogic 提供了 2 個(gè)預(yù)配置隊(duì)列:
          n?????? weblogic.admin.HTTP——只在管理服務(wù)器上才有,這個(gè)隊(duì)列供與管理控制臺(tái)的通信用,你不能再配置它。
          n?????? weblogic.admin.RMI——管理服務(wù)器和被管理服務(wù)器上都有這個(gè)隊(duì)列,它是供管理的交通之用,也不能再配置它。
          如果你不配置額外的執(zhí)行隊(duì)列,并且指定應(yīng)用給這些隊(duì)列, web 應(yīng)用程序和 RMI 對(duì)象就使用默認(rèn)的隊(duì)列 weblogic.kernel.default
          注意;如果自帶的執(zhí)行包沒(méi)有在你的平臺(tái)上使用,你可能需要調(diào)整默認(rèn)的執(zhí)行隊(duì)列線程數(shù)和擔(dān)任 socket 讀的線程的百分比,去實(shí)現(xiàn)最佳性能。
          5 1 你應(yīng)該更改默認(rèn)的線程數(shù)嗎 ?
          增加更多的線程到默認(rèn)的執(zhí)行隊(duì)列并不意味著你能處理更多的工作。即使增加更多的線程,仍然被處理器的能力限制。因?yàn)榫€程消耗內(nèi)存,所以增加線程數(shù)屬性的值不必要的降低了性能。一個(gè)高的執(zhí)行線程數(shù)導(dǎo)致更多的內(nèi)存被占用并且增加了上下文轉(zhuǎn)換程序,它也會(huì)降低性能。
          線程數(shù)屬性的值與應(yīng)用程序處理的工作的類型關(guān)系密切。例如,如果你的客戶應(yīng)用程序比較小,通過(guò)遠(yuǎn)程調(diào)用處理的工作較多,這樣,客戶端會(huì)花費(fèi)更多的時(shí)間連接,因此,與能完成大量客戶端任務(wù)的客戶應(yīng)用程序相比,會(huì)需要更多的線程數(shù)。
          如果你的工作不需要使用超過(guò)15個(gè)線程(開(kāi)發(fā)模式默認(rèn))或者25個(gè)線程(產(chǎn)品模式默認(rèn)),就不要改變這個(gè)屬性的值。通常,如果你的應(yīng)用程序訪問(wèn)數(shù)據(jù)庫(kù)花很長(zhǎng)時(shí)間才返回結(jié)果,與訪問(wèn)數(shù)據(jù)庫(kù)很短時(shí)間就返回的應(yīng)用程序比較,你會(huì)需要更多的執(zhí)行線程。從后者來(lái)看,用少點(diǎn)的線程數(shù)可能提高性能。
          5 2 需要修改默認(rèn)線程數(shù)的情形
          為了給執(zhí)行隊(duì)列決定一個(gè)理想的線程數(shù),當(dāng)隊(duì)列中所有應(yīng)用程序都運(yùn)行在最大負(fù)荷的情況下,監(jiān)視隊(duì)列的吞吐量。增加線程數(shù),重復(fù)負(fù)載測(cè)試,直到達(dá)到最佳的吞吐量。(在某些情況下,增加線程數(shù)將產(chǎn)生足夠多的上下文轉(zhuǎn)換程序,使得隊(duì)列中的吞吐量開(kāi)始減少。)
          注意: WebLogic 管理控制臺(tái)顯示的是所有服務(wù)器執(zhí)行隊(duì)列累積的吞吐量。為了得到這個(gè)值,后面將會(huì)介紹。
          下表列出了在WebLogic 域中調(diào)整的線程及與CPU數(shù)量相關(guān)的情形,這些情況也假定WebLogic運(yùn)行在最大負(fù)荷下,并且使用默認(rèn)的執(zhí)行隊(duì)列滿足所有的線程的請(qǐng)求。如果你配置了額外的執(zhí)行隊(duì)列并指派了應(yīng)用程序到具體的隊(duì)列,就需要依據(jù)一個(gè)個(gè)連接池得到結(jié)果。
          如果…
          結(jié)果
          應(yīng)該:
          線程數(shù)<CPU的數(shù)量
          線程數(shù)太少,如果:
          CPU 正等著工作,但有工作被完成。
          CPU 利用率不能達(dá)到100%。
          增加線程數(shù)。
          線程數(shù)=CPU的數(shù)量
          理論上理想,但是CPU仍然低利用。
          增加線程數(shù)。
          線程數(shù)(適當(dāng)?shù)模?gt;CPU的數(shù)量
          實(shí)際中理想,有個(gè)適當(dāng)?shù)纳舷挛霓D(zhuǎn)換程序數(shù)量和高的CPU利用率。
          調(diào)整適當(dāng)?shù)木€程數(shù)并且比較性能結(jié)果。
          線程數(shù)(較大的)>CPU的數(shù)量
          過(guò)多的上下文轉(zhuǎn)換程序,能導(dǎo)致重大的性能降級(jí)。
          當(dāng)你降低線程數(shù)時(shí),性能可以增強(qiáng)。
          減少線程數(shù),使它等于CPU的數(shù)量,然后僅僅增加已經(jīng)得出的“堵塞”線程的數(shù)量。
          例如,如果你有4個(gè)處理器,它們都同時(shí)運(yùn)行,并出現(xiàn)堵塞線程,于是,你想要的執(zhí)行線程就是4+堵塞線程的數(shù)
          5 3 修改默認(rèn)線程數(shù)的步驟
          用管理控制臺(tái)修改默認(rèn)執(zhí)行隊(duì)列線程數(shù)如下:
          1.??? 如果管理服務(wù)器沒(méi)有運(yùn)行,先啟動(dòng)。
          2.??? 訪問(wèn)管理控制臺(tái)。
          3.??? 展開(kāi)左邊面板的Servers 節(jié)點(diǎn),顯示域服務(wù)。
          4.??? 右擊服務(wù)名稱,在彈出菜單中選擇View Execute Queues ,就會(huì)在右邊面板顯示有執(zhí)行隊(duì)列的表用來(lái)修改。
          注意:你只能修改默認(rèn)的執(zhí)行隊(duì)列或者用戶定義的執(zhí)行隊(duì)列。
          5.??? 在Name列,直接點(diǎn)擊默認(rèn)執(zhí)行隊(duì)列名稱,顯示配置標(biāo)簽用來(lái)修改執(zhí)行隊(duì)列數(shù)。
          6.??? 填下適當(dāng)?shù)木€程數(shù)。
          7.??? 點(diǎn)擊Apply,保存剛才的修改。
          8.??? 重啟服務(wù)器,使新的執(zhí)行隊(duì)列設(shè)置生效。
          ?
          5 4 指派應(yīng)用程序到執(zhí)行隊(duì)列
          雖然可以配置默認(rèn)的執(zhí)行隊(duì)列,為所有的 WebLogic 應(yīng)用程序提供最佳的線程數(shù),但是為關(guān)鍵的應(yīng)用程序配置多個(gè)執(zhí)行隊(duì)列可以提供更多的管理控制。通過(guò)使用多執(zhí)行隊(duì)列,你可以保證應(yīng)用程序有權(quán)占用固定的線程數(shù),而不管 WebLogic 服務(wù)器有多大的負(fù)荷。
          5 5 創(chuàng)建執(zhí)行隊(duì)列
          一個(gè)執(zhí)行隊(duì)列代表執(zhí)行線程的命名集,線程指向一個(gè)或多個(gè) Servlet JSP EJB RMI 對(duì)象。執(zhí)行隊(duì)列在 config.xml 文件中描述,作為服務(wù)器元素的一部分。如,在 config.xml 文件中描述一個(gè)有 4 個(gè)線程的隊(duì)列,命名為 CriticalAppQueue ,如下:
          ...
          <Server
          Name="examplesServer"
          ListenPort="7001"
          NativeIOEnabled="true"/>
          <ExecuteQueue Name="default"?
          ThreadCount="15"/>
          <ExecuteQueue Name="CriticalAppQueue" ?
          ThreadCount="4"/>
          ?...
          </Server>
          另一種創(chuàng)建隊(duì)列的方法是通過(guò)管理控制臺(tái),配置步驟如下:
          1 ??? 啟動(dòng)管理服務(wù)器,訪問(wèn)控制臺(tái)。
          2 ??? 展開(kāi)左邊面板中 Servers 節(jié)點(diǎn),顯示域中要配置的服務(wù)。
          3 ??? 右擊你要增加隊(duì)列的服務(wù)實(shí)例,從彈出菜單中選擇 View Execute Queues
          4 ??? 在隊(duì)列配置標(biāo)簽中,點(diǎn)擊配置新執(zhí)行隊(duì)列鏈接。
          5 ??? 在隊(duì)列配置標(biāo)簽中,更改下列屬性或接受系統(tǒng)的默認(rèn)值:
          n ???????? 線程名稱( Name ):你可以輸入線程名稱,如 CriticalAppQueue
          n ???????? 隊(duì)列長(zhǎng)度 (Queue Length) :通常保留默認(rèn)值 65536 ,隊(duì)列長(zhǎng)度表明了同時(shí)發(fā)來(lái)請(qǐng)求的最大數(shù), 65536 個(gè)請(qǐng)求是個(gè)很大的數(shù),即使達(dá)到這個(gè)最大數(shù),也是很少見(jiàn)的。
          如果達(dá)到最大隊(duì)列長(zhǎng)度, WebLogic 會(huì)自動(dòng)成倍增長(zhǎng)隊(duì)列大小,以處理額外的工作。
          注意:超過(guò) 65536 個(gè)請(qǐng)求預(yù)示隊(duì)列中的線程有問(wèn)題,不僅僅只是隊(duì)列本身的長(zhǎng)度問(wèn)題,實(shí)踐表明在隊(duì)列中有堵塞線程或線程數(shù)不足的情況存在。
          n ???????? 隊(duì)列長(zhǎng)限制百分比( Queue Length Threshold Percent ):達(dá)到隊(duì)列長(zhǎng)度百分比( 1 99 )時(shí),就構(gòu)成了溢出條件的產(chǎn)生。實(shí)際隊(duì)列大小在限制的百分比之下時(shí)才被認(rèn)為是正常的;在限制百分比之上就會(huì)產(chǎn)生溢出。當(dāng)出現(xiàn)溢出, WebLogic 日志就會(huì)產(chǎn)生一個(gè)錯(cuò)誤消息,并且按線程數(shù)增量( Threads Increase )屬性的值增加線程數(shù),以幫助減少負(fù)載量。
          默認(rèn)的隊(duì)列長(zhǎng)限制百分比為 90 %。一般情況下,應(yīng)保留 90 %或其左右,以應(yīng)對(duì)一些潛在的情況,使得有額外的線程可以去處理一些請(qǐng)求中的異常。記住,隊(duì)列長(zhǎng)度限制百分比不是一定作為自動(dòng)優(yōu)化參數(shù)――因?yàn)檎_\(yùn)作情況下,這個(gè)限度從不會(huì)被觸發(fā)。
          n ???????? 線程數(shù)( Tread Count ):指派到這個(gè)隊(duì)列的線程數(shù)。如果你不需要使用超過(guò) 15 個(gè)線程(默認(rèn)),就不必更改這個(gè)屬性值。
          ?
          n ???????? 線程數(shù)增量( Threads Increase ):是指 WebLogic 探測(cè)到有溢出時(shí),增加到執(zhí)行隊(duì)列的線程數(shù)。當(dāng)你指定為 0 (默認(rèn)),出現(xiàn)溢出時(shí), WebLogic 會(huì)把運(yùn)行良好狀態(tài)改為“警告”,而且也不會(huì)指派額外的線程去減少負(fù)荷量。
          ?
          注意:如果 WebLogic 實(shí)例的線程數(shù)響應(yīng)了溢出,那么這些額外的線程就會(huì)滯留在執(zhí)行隊(duì)列,直到服務(wù)器重啟。監(jiān)視錯(cuò)誤日志,以判斷溢出產(chǎn)生的原因,以便根據(jù)需要重配置線程數(shù),防止以后類似情況產(chǎn)生。不要同時(shí)使用線程數(shù)增量和隊(duì)列長(zhǎng)限制百分比作為自動(dòng)優(yōu)化的手段。如此做通常結(jié)果會(huì)產(chǎn)生比正常需要還多的線程被指派到執(zhí)行隊(duì)列,這樣上下文轉(zhuǎn)化程序的增多會(huì)使服務(wù)器遭受很差的性能。
          ?
          n ???????? 最大線程數(shù):是指執(zhí)行隊(duì)列中能運(yùn)行的,這個(gè)值保護(hù) WebLogic 為了響應(yīng)頻繁溢出,創(chuàng)建過(guò)多的線程數(shù)。默認(rèn)情況下,最大線程數(shù)為 400
          n ???????? 線程優(yōu)先級(jí):線程優(yōu)先級(jí)與此隊(duì)列相關(guān)。默認(rèn)值為 5
          ?
          6 ??? 點(diǎn)擊 Create ,創(chuàng)建隊(duì)列。
          7 ??? 重啟服務(wù)器。
          5 6 指派 Servlet JSP 到執(zhí)行隊(duì)列
          你可以把 servlet JSP 分配到指定的配置執(zhí)行隊(duì)列,只需在初始參數(shù)中標(biāo)識(shí)執(zhí)行隊(duì)列的名稱。初始參數(shù)出現(xiàn)在 Servert JSP 的部署描述文件 web.xml 中的 init-param 元素里。為了分配一個(gè)隊(duì)列,可以把隊(duì)列名作為 wl-dispatch-policy 參數(shù)的值。如:
          <servlet>

          ???<servlet-name>MainServlet</servlet-name>

          ???<jsp-file>/myapplication/critical.jsp</jsp-file>

          ???<init-param>

          ??????<param-name>wl-dispatch-policy</param-name>

          ??????<param-value>CriticalAppQueue</param-value>

          ???</init-param>

          </servlet>
          5 7 指派 EJB RMI 對(duì)象到執(zhí)行隊(duì)列
          為了把 EJB 分配到指定的隊(duì)列,可以使用 weblogic-ejb-jar.xml 文件中 dispatch-policy 元素。
          然而你也可以通過(guò)使用 appc 編譯器 dispatchPolicy 選項(xiàng)來(lái)設(shè)置派遣策略, BEA 強(qiáng)烈推薦使用部署描述元素。因?yàn)橛眠@種方式,如果 EJB 重編譯,在部署用例期間,這個(gè)設(shè)置不會(huì)被丟失。
          為了把 RMI 對(duì)象分配到指定的隊(duì)列,可以使用 rmic 編譯器的- dispatchPolicy 選項(xiàng),如:
          java weblogic.rmic -dispatchPolicy CriticalAppQueue ...
          ?
          5 8 分配執(zhí)行隊(duì)列擔(dān)任 Socket
          為了獲得更好的 socket 性能, BEA 推薦你使用自有的 socket 讀執(zhí)行工具,它更優(yōu)于純 Java 執(zhí)行工具。然而,如果你一定要在主機(jī)上用純 Java socket 讀,你仍然可以通過(guò)配置恰當(dāng)?shù)膱?zhí)行線程數(shù)以提高 socket 通信性能,為每個(gè)服務(wù)器實(shí)例和客戶機(jī)器擔(dān)負(fù) socket 讀線程的任務(wù)。
          Socket 讀占線程池百分比( ThreadPoolPercentSocketReader )屬性可以設(shè)置用來(lái)從 socket 讀消息的執(zhí)行線程的最大百分比。這個(gè)屬性的最優(yōu)值是根據(jù)應(yīng)用程序的需要指定的。默認(rèn)值是 33 ,有效范圍在 1 99 之間。
          分配執(zhí)行線程擔(dān)任 socket 讀增加了服務(wù)器處理速度和接受客戶請(qǐng)求的能力。有必要平衡執(zhí)行線程數(shù),使其專注于從 socket 讀消息,也有必要平衡那些在服務(wù)器處理實(shí)際任務(wù)的執(zhí)行線程。
          5 9 為服務(wù)器實(shí)例設(shè)置 socket 讀的線程數(shù)的操作
          1 ??? 啟動(dòng)管理服務(wù)器,訪問(wèn)域控制臺(tái)。
          2 ??? 展開(kāi)左邊面板 Servers 節(jié)點(diǎn),顯示域服務(wù)配置。
          3 ??? 點(diǎn)擊你要配置的服務(wù)名稱。
          4 ??? 選擇配置( Configuration )―― > 調(diào)整( Tuning )標(biāo)簽。
          5 ??? Socket Reader 中編輯 Java 讀線程的百分比。 Java socket 讀線程數(shù)是根據(jù)所有的執(zhí)行線程數(shù)的百分比計(jì)算得到的。
          6 ??? 應(yīng)用( Apply )這個(gè)調(diào)整。
          ?
          5 10 在客戶機(jī)設(shè)置 Socket 讀線程數(shù)
          在客戶機(jī)上,你可以配置運(yùn)行在 JVM Java 虛擬機(jī))上的 socket 讀線程數(shù)。指定 Socket 讀,需要通過(guò)用 java 命令行定義下列參數(shù):
          -Dweblogic.ThreadPoolSize=value
          -Dweblogic.ThreadPoolPercentSocketReaders=value
          5 11 優(yōu)化溢出情況時(shí)的執(zhí)行隊(duì)列
          你可以配置 WEBLOGIC 監(jiān)測(cè)并且隨時(shí)應(yīng)對(duì)潛在的溢出,不管其發(fā)生在默認(rèn)的執(zhí)行隊(duì)列還是用戶定義的隊(duì)列。一旦當(dāng)前隊(duì)列大小快達(dá)到用戶定義的百分比, WebLogic 認(rèn)為隊(duì)列中有一個(gè)可能的溢出產(chǎn)生。
          當(dāng)這個(gè)限度到達(dá)時(shí),服務(wù)器改變它的良好狀態(tài)為“警告”,隨即分配額外的線程去處理超負(fù)荷的工作,從而還原它的大小。
          為了自動(dòng)監(jiān)測(cè)和應(yīng)對(duì)溢出,你可以配置以下項(xiàng):
          1 ??? 隊(duì)列長(zhǎng)限制百分比,這個(gè)值是隊(duì)列大小的百分比。
          2 ??? 當(dāng)溢出發(fā)生時(shí),增加到隊(duì)列的線程數(shù)。這些額外的線程以還原隊(duì)列到正常的運(yùn)行的大小。
          3 ??? 線程的最大數(shù),在特殊情況下,線程最大數(shù)用來(lái)保護(hù)服務(wù)器在響應(yīng)過(guò)載情況下過(guò)度分配線程數(shù)。
          5 12 優(yōu)化執(zhí)行隊(duì)列的監(jiān)測(cè)行為
          當(dāng)一個(gè)線程在隊(duì)列中變成堵塞狀態(tài)時(shí), WebLogic 會(huì)自動(dòng)監(jiān)測(cè)到。因?yàn)槎氯€程不能完成它當(dāng)前的工作或接受新的工作,服務(wù)器每次診斷一個(gè)堵塞線程,就記入一個(gè)消息到日志中。如果一個(gè)隊(duì)列中所有的線程變成堵塞,服務(wù)器改變良好狀態(tài)成“警告”或者“危機(jī)”,依賴于下列情況:
          n ???????? 如果默認(rèn)隊(duì)列中所有的線程變成堵塞,服務(wù)器狀態(tài)變成“危機(jī)”。(你可以設(shè)立節(jié)點(diǎn)管理器( Node Manager )應(yīng)用去自動(dòng)關(guān)閉及重啟服務(wù)器。)
          n ???????? 如果在 weblogic.admin.HTTP, weblogic.admin.RMI 或用戶定義的隊(duì)列中所有線程變成堵塞,服務(wù)器狀態(tài)變成“警告”。
          WebLogic 診斷到一個(gè)堵塞線程,如果它是在指定的時(shí)間內(nèi)連續(xù)不斷的工作(沒(méi)有空閑)。你可以調(diào)整服務(wù)器線程監(jiān)測(cè)行為,它是通過(guò)改變堵塞線程被診斷前的時(shí)間長(zhǎng)度和服務(wù)器核查堵塞線程的頻率。
          注意:盡管你能改變標(biāo)準(zhǔn) WebLogic 去決定一個(gè)線程是否堵塞,但,你不能改變默認(rèn)行為,就是出現(xiàn)堵塞時(shí)把服務(wù)器設(shè)置成“警告”或“危機(jī)”的行為。
          配置 WebLogic 堵塞線程監(jiān)測(cè)行為的步驟:
          1 ??? 啟動(dòng) WebLogic ,訪問(wèn)管理控制臺(tái)。
          2 ??? 點(diǎn)擊你想為改善堵塞線監(jiān)測(cè)而修改的服務(wù)器實(shí)例的名稱。
          3 ??? 選擇配置( Configuration )―― > 調(diào)整( Tuning )標(biāo)簽。
          4 ??? 修改下列參數(shù):
          ?
          n ???????? 堵塞線程最大時(shí)間( Stuck Thread Max Time ):輸入秒數(shù),線程一定是不斷的運(yùn)行,服務(wù)器才會(huì)診斷這個(gè)線程作為堵塞。默認(rèn)情況下, WebLogic 認(rèn)為線程連續(xù)不斷運(yùn)行 600 秒后置為堵塞。
          n ???????? 堵塞線程時(shí)間間隔( Stuck Thread Timer Interval ):輸入秒數(shù),這個(gè)時(shí)間是 WebLogic 周期性的掃描線程以察覺(jué)它們是否連續(xù)不斷運(yùn)行了某一線程的時(shí)間達(dá)到通過(guò)堵塞線程最大時(shí)間屬性指定的時(shí)間長(zhǎng)度。默認(rèn)時(shí)間間隔為 600 秒。
          5 ??? 應(yīng)用( Apply )設(shè)置。
          6 ??? 重啟服務(wù)器。
          六、優(yōu)化連接緩存
          Config.xml 文件中的元素接受緩存數(shù)( AcceptBacklog )屬性是用來(lái)設(shè)定請(qǐng)求 WebLogic 實(shí)例的連接數(shù),在拒絕額外的請(qǐng)求之前,能接受設(shè)定的緩存數(shù)。 AcceptBacklog 屬性指定有多少 TCP 連接緩存在等待隊(duì)列,這個(gè)固定的隊(duì)列存放了 TCP 堆棧已經(jīng)收到但應(yīng)用程序還沒(méi)有收到的連接請(qǐng)求。默認(rèn)值是 50 ,最大值由操作系統(tǒng)決定。
          在控制臺(tái)調(diào)整接受緩存數(shù)的步驟:
          1. ??? 啟動(dòng) WebLogic ,訪問(wèn)控制臺(tái)。
          2. ??? 展開(kāi)左邊面板 Servers 節(jié)點(diǎn)。
          3. ??? 點(diǎn)擊你要配置的服務(wù)器實(shí)例的名稱。
          4. ??? 選擇配置( Configuration )―― > 調(diào)整( Tuning )標(biāo)簽。
          5. ??? 根據(jù)需要修改默認(rèn)的接受緩存數(shù)( Accept Backlog ):
          n ???????? 在運(yùn)行期間,如果許多客戶端連接得不到響應(yīng)或被拒絕,并且服務(wù)器端也沒(méi)有錯(cuò)誤消息,說(shuō)明接受緩存的值可能太小。
          n ???????? 在你訪問(wèn) WebLogic 時(shí),如果收到“拒絕連接( connection refused )”的提示,則應(yīng)該增加接受緩存的默認(rèn)值的 25 %。繼續(xù)增加其值的 25 %,直到停止出現(xiàn)這樣的提示。
          6. ??? 點(diǎn)擊應(yīng)用( Apply ),保存設(shè)置。
          ?
          七、如何提高 JDBC 連接池的性能
          創(chuàng)建一個(gè)帶 DBMS JDBC 連接是非常慢的。如果應(yīng)用程序需要數(shù)據(jù)庫(kù)不斷的連接和斷開(kāi),這種創(chuàng)建方式會(huì)造成一個(gè)重大的性能問(wèn)題。 WebLogic 連接池提供了一種高效的解決方案來(lái)解決這個(gè)問(wèn)題。
          當(dāng)啟動(dòng) WebLogic ,就打開(kāi)連接池,以便于所有客戶連接。當(dāng)一個(gè)客戶關(guān)閉一個(gè)連接,這個(gè)連接就返回到連接池,供其他的客戶使用。連接本身不會(huì)關(guān)閉。如此就用極少的代價(jià)實(shí)現(xiàn)了連接和斷開(kāi)連接池。
          在連接池里應(yīng)該創(chuàng)建多少連接呢?連接池會(huì)根據(jù)配置參數(shù)中的最大數(shù)與最小數(shù)之間增加或減少連接。最好的性能應(yīng)該是連接數(shù)與當(dāng)前客戶會(huì)話( Session )數(shù)相同。
          7 1 調(diào)整 JDBC 連接池的初始容量
          在配置連接池時(shí), JDBCConnectionPool 元素中的 InitialCapacity 屬性能設(shè)定連接數(shù),創(chuàng)建物理的數(shù)據(jù)庫(kù)連接。如果服務(wù)器不能創(chuàng)建這個(gè)連接數(shù),連接池的創(chuàng)建就會(huì)失敗。
          在開(kāi)發(fā)期間,為了使服務(wù)器啟動(dòng)更快,可以很方便的設(shè)置 InitialCapacity 屬性的值小一點(diǎn)。在產(chǎn)品系統(tǒng)中,就應(yīng)該把 InitialCapacity 的值設(shè)為與 MaxCapacity 值相同,默認(rèn)產(chǎn)品模式的值為 25 。這樣,在服務(wù)器啟動(dòng)時(shí),所有的連接就會(huì)被創(chuàng)建。如果你調(diào)整了 MaxCapacity 值后,一定要確信 InitialCapacity 值設(shè)置與 MaxCapacity 值相同。
          如果 InitialCapacity MaxCapacity 值少,當(dāng)負(fù)荷增加時(shí),服務(wù)器需要?jiǎng)?chuàng)建額外的數(shù)據(jù)庫(kù)連接。當(dāng)服務(wù)器處于低負(fù)荷時(shí),所有的資源應(yīng)該是盡快的完成請(qǐng)求,而不是創(chuàng)建新的數(shù)據(jù)庫(kù)連接。
          7 2 調(diào)整 JDBC 連接池的最大容量
          JDBCConnectonPool 元素中的 MaxCapacity 屬性設(shè)置連接池包含的最大的物理數(shù)據(jù)庫(kù)連接數(shù)。不同的 JDBC 驅(qū)動(dòng)程序和數(shù)據(jù)庫(kù)服務(wù)器可能限制物理連接數(shù)。
          默認(rèn)的最大容量數(shù)與默認(rèn)的線程數(shù)相等:開(kāi)發(fā)模式為 15 ,產(chǎn)品模式為 25 。不過(guò),在產(chǎn)品模式下,建議連接數(shù)與當(dāng)前的客戶會(huì)話( Session )數(shù)相等。在服務(wù)器端,連接池的容量與執(zhí)行線程數(shù)是無(wú)關(guān)的,正在進(jìn)行的用戶會(huì)話比執(zhí)行線程更多。
          ?
          八、設(shè)置 Java 編譯器
          編譯 JSP Servlet 的標(biāo)準(zhǔn) Java 編譯器是 javac 。你可以把 java 編譯器設(shè)置為 si jikes 代替 javac ,這樣能極大的提高性能。下面討論設(shè)置步驟及其要考慮的事項(xiàng)。
          8 1 通過(guò)控制臺(tái)改變編譯器
          1. ??? 啟動(dòng)服務(wù)器,訪問(wèn)控制臺(tái)。
          2. ??? 展開(kāi)左邊面板 Servers 節(jié)點(diǎn)。
          3. ??? 點(diǎn)擊要配置的服務(wù)器實(shí)例的名稱。
          4. ??? 選擇配置( Configuration )―― > 常規(guī)( General ),在 Java Compiler 編輯框輸入編譯器的完全路徑。如: c:\visualcafe31\bin\sj.exe
          5. ??? 點(diǎn)擊高級(jí)選項(xiàng)( Advanced Option )―― >Show ,顯示其他的屬性。
          6. ??? 用添加( Append )把完全路徑通過(guò) Classpath 框輸入到 JRE rt.jar 庫(kù)。如: BEA_HOME \jdk141_02\jre\lib\rt.jar
          7. ??? 點(diǎn)擊應(yīng)用。
          8. ??? 重啟服務(wù)器。
          8 2 Weblogic.xml 文件中設(shè)置編譯器
          n ???????? 使用 compileCommand 參數(shù)指定 Java 編譯器。
          n ???????? 使用 procompile 參數(shù)配置 WebLogic ,在啟動(dòng) WebLogic 時(shí)預(yù)編譯 JSP
          8 3 編譯 EJB 容器類
          使用 Weblogic.appc 的功能去編譯 EJB2.0 1.1 容器類。如果編譯 Jar 文件部署 EJB 容器,你必須使用 weblogic.appc 生成容器類。默認(rèn)情況下, EJB 使用 javac 編譯器。為了得到跟好的性能,使用- compiler 標(biāo)志指定不同的編譯器(如 Symantec 公司的 sj
          8 4 UNIX 環(huán)境下編譯
          UNIX 機(jī)器上編譯 JSP 文件,如果收到下列錯(cuò)誤消息:
          failed java.io.IOException:Not enough space
          試試下列一些或所有的解決方法:
          n ???????? 如果你只有 256MB 的內(nèi)存,增加更大的內(nèi)存。
          n ???????? 提高文件描述文件的限制,如:
          set rlim_fd_max=4096
          set rlim_fd_cur=1024
          n ???????? 啟動(dòng) JVM 時(shí),用- native 標(biāo)志來(lái)使用自有的線程。
          九、使用 WebLogic 集群提高性能
          WebLogic 集群是指一組 WebLogic 實(shí)例在一起提供具有防過(guò)載和自有復(fù)制的功能,以用一個(gè)域?yàn)樗锌蛻糁С挚缮炜s的高可用性運(yùn)行。集群對(duì)于客戶是一個(gè)單一的服務(wù)器,但實(shí)際上是一組服務(wù)器來(lái)提高可靠性和可伸縮性。
          9 1 可伸縮性和高的可用性
          可伸縮性是系統(tǒng)增加一個(gè)或更多部件作為系統(tǒng)資源的能力。很典型的是,這些部件使并發(fā)用戶得到支持,使并發(fā)事務(wù)能在特定的時(shí)間單位能被處理。
          假定應(yīng)用程序設(shè)計(jì)良好,它完全可以簡(jiǎn)單的增加更多的資源來(lái)提高性能。為了增加 WebLogic 處理的負(fù)荷量,只需增加一個(gè) WebLogic 實(shí)例到你的集群――不需改變應(yīng)用程序。集群提高兩個(gè)關(guān)鍵的好處:可伸縮性和可用性,這是單一服務(wù)器無(wú)法比擬的。
          WebLogic 集群給 J2EE 帶來(lái)了可伸縮性和高的可用性,而且對(duì)于應(yīng)用程序的開(kāi)發(fā)者是透明的。可伸縮性擴(kuò)展了中間層的能力,超過(guò)了單一的 WebLogic 服務(wù)器或單一的計(jì)算機(jī)能處理的。集群成員唯一的限制是所有 WebLogic 必須要用 IP 多點(diǎn)傳送通信。新的 WebLogic 能動(dòng)態(tài)的增加到集群,以增加處理能力。
          WebLogic 集群保證高的可用性是通過(guò)多個(gè)服務(wù)器的冗余,減少客戶的請(qǐng)求失敗。集群中多個(gè)服務(wù)器能提供同一服務(wù)。如果一個(gè)服務(wù)器停止運(yùn)行,另一個(gè)能接替運(yùn)行。這種功能為客戶增加了可用性。
          警告:如果你要解決應(yīng)用程序和環(huán)境的頸瓶問(wèn)題,增加額外的服務(wù)器到集群,應(yīng)該提供線性的可伸縮性。定基準(zhǔn)和初始配置測(cè)試運(yùn)行時(shí),在移到集群環(huán)境之前,應(yīng)把應(yīng)用隔離在單獨(dú)的服務(wù)器上測(cè)試。
          9 2 在多 CPU 機(jī)器上運(yùn)行多服務(wù)器實(shí)例,應(yīng)考慮的性能問(wèn)題
          多處理器的機(jī)器上,必須考慮群集 WebLogic 實(shí)例數(shù)應(yīng)與 CPU 的數(shù)量成比例。因?yàn)?/span> WebLogic 沒(méi)有內(nèi)置限制的服務(wù)器實(shí)例數(shù)位于集群里,規(guī)模大的、多處理器服務(wù)器,如 Sun 公司的 Sun Enterprise 10000 ,有著當(dāng)作非常大的集群或多集群主機(jī)的潛能。
          在決定最佳的服務(wù)器與 CPU 比例前,徹底測(cè)試你的應(yīng)用程序并確定如下:
          n ???????? 網(wǎng)絡(luò)要求 ? 如果你發(fā)現(xiàn) Web 應(yīng)用程序是主要受網(wǎng)絡(luò) I/O 限制,在增加 CPU 數(shù)前,考慮測(cè)試網(wǎng)絡(luò)的吞吐量。如果實(shí)際是網(wǎng)絡(luò) I/O 限制,安裝一個(gè)更快的網(wǎng)絡(luò)接口卡( NIC )可以提供性能,而不是增加額外的 CPU ,因?yàn)樵诘戎x socket 時(shí),更多的 CPU 會(huì)處于閑置。
          n ???????? 磁盤 I/O 要求 ?? 如果你發(fā)現(xiàn) Web 應(yīng)用程序主要受磁盤 I/O 限制。在配置額外的 CPU 前,就應(yīng)該考慮增加磁盤轉(zhuǎn)速或單個(gè)磁盤。
          總之,在配置額外的 CPU 前,必須確定 Web 應(yīng)用程序是受 CUP 限制,而不是受網(wǎng)絡(luò)或磁盤 I/O 限制。
          對(duì)于受 CPU 限制的應(yīng)用,最初在每個(gè) CPU 上對(duì)一個(gè) WebLogic 實(shí)例進(jìn)行性能測(cè)試。如果 CPU 利用率是一致的或者接近 100 %,然后增加 CPU 比重(例如,為一個(gè) WebLogic 實(shí)例配置兩個(gè) CUP ),記住在產(chǎn)品模式下,應(yīng)該有一些空閑的 CPU 周期存在去執(zhí)行管理任務(wù)。
          雖然 Web 應(yīng)用程序的處理需求變化多端,但 BEA 公司發(fā)現(xiàn) WebLogic 實(shí)例與 CPU 最理想的比例是 1 2
          ?
          十、監(jiān)視 WebLogic
          監(jiān)視 WebLogic 域的健康狀況和性能的工具是管理控制臺(tái)。通過(guò)控制臺(tái),你可以觀察到 WebLogic 資源的狀態(tài)和統(tǒng)計(jì)信息,如服務(wù)器, HTTP JTA 子系統(tǒng), JNDI, 安全, CORBA 連接池, EJB JDBC 以及 JMS
          舉個(gè)例子,在 Server ―― >Monitoring ―― >Performance 為當(dāng)前服務(wù)器實(shí)例提供了與等待和運(yùn)行狀態(tài)的請(qǐng)求有關(guān)的性能參考。它包括下列信息:
          n ???????? 隊(duì)列中空閑線程數(shù)。
          n ???????? 隊(duì)列中等待時(shí)間最長(zhǎng)的請(qǐng)求。
          n ???????? 吞吐量,根據(jù)已經(jīng)處理的請(qǐng)求數(shù)來(lái)衡量的。
          n ???????? 隊(duì)列長(zhǎng)度,根據(jù)隊(duì)列中等待請(qǐng)求數(shù)來(lái)衡量的。
          n ???????? JVM 堆還有的內(nèi)存量。


          jwebee

          我的個(gè)人網(wǎng)站
          posted on 2007-04-19 13:32 周行 閱讀(3454) 評(píng)論(2)  編輯  收藏 所屬分類: IT技術(shù)

          FeedBack:
          # re: 優(yōu)化WebLogic
          2008-06-18 16:14 | 娃娃
          哥們 寫的挺詳細(xì) ,就是 照片讓我找到了 自信  回復(fù)  更多評(píng)論
            
          Java-Android-jwebee
          主站蜘蛛池模板: 靖安县| 铁岭市| 金山区| 蓬溪县| 新民市| 慈利县| 青川县| 高陵县| 崇州市| 黎川县| 枝江市| 大埔县| 建阳市| 漠河县| 宜兰县| 鹤峰县| 芜湖市| 策勒县| 奉节县| 奉化市| 万盛区| 金坛市| 息烽县| 五常市| 高密市| 邵阳县| 苍南县| 秭归县| 长寿区| 安新县| 德惠市| 金山区| 苍南县| 新安县| 焦作市| 如皋市| 鞍山市| 武山县| 连山| 彭州市| 明溪县|