優(yōu)化
WebLogic
服務(wù)器性能參數(shù)
WebLogic 配置文件(config.xml)包含了大量很直觀的與性能有關(guān)的參數(shù),能通過配置環(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è)線程來運(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)整開發(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)單來說,通過
WebLogic.Server
域的命令行就可以完成,不過,由于這樣啟動(dòng)的過程冗長(zhǎng)并且易于出錯(cuò),
BEA
公司推薦你把這個(gè)命令寫進(jìn)腳本里。為了簡(jiǎn)化這個(gè)過程,你可以修改樣例腳本里的默認(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ù)器是,首先讀域配置文件,然后跳過建立在配置文件中管理
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)整開發(fā)模式與產(chǎn)品模式默認(rèn)值
你可以指定域?yàn)殚_發(fā)環(huán)境或?yàn)楫a(chǎn)品環(huán)境。
WebLogic
會(huì)根據(jù)你指定的環(huán)境類型使用不同的默認(rèn)值提供不同的服務(wù)。
下表列出了兩種模式下的默認(rèn)值
優(yōu)化參數(shù)
|
開發(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í)模式,用文本編輯器打開
WL_HOME\common\bin\commEnv.cmd(Windows)
或者
WL_HOME\common\bin\commEnv.sh (UNIX)
,
WL_HOME
是安裝
WebLogic
的路徑。
為指定的域更改運(yùn)行時(shí)模式,就用文本編輯器打開
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
兩種模式的不同
下表列出了開發(fā)模式與產(chǎn)品模式幾種關(guān)鍵項(xiàng)的區(qū)別:
功用名稱
|
開發(fā)模式
|
產(chǎn)品模式
|
SSL
|
你可以使用
WebLogic
安全服務(wù)提供的驗(yàn)證數(shù)字證書。有這些證書,你開發(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)用程序。
不過,如果你一定要用純
Java socket
讀在主機(jī)上運(yùn)行,你仍然可以通過配置每個(gè)服務(wù)器實(shí)例和客戶機(jī)中適當(dāng)?shù)?/span>
socket
讀的線程數(shù)量,來提高
socket
通信的性能。
設(shè)置性能包的操作方法:
默認(rèn)情況下,裝載在
config.xml
中的是自有的性能包。為了驗(yàn)證這個(gè)設(shè)置,在配置文件中檢查
NativeIOEnabled
屬性是否設(shè)為“
true
”(
NativeIOEnabled=true
)。
你也可以通過管理控制臺(tái)來驗(yàn)證,步驟如下:
1
,
???
啟動(dòng)管理服務(wù)器。
2
,
???
訪問管理控制臺(tái)。
3
,
???
展開左邊面板的
Servers
節(jié)點(diǎn),顯示域服務(wù)。
4
,
???
點(diǎn)擊你要配置的服務(wù)實(shí)例。
5
,
???
選擇
Configuration
-
>Tuning tab
。
6
,
???
如果
Enable Native IO
復(fù)選框沒有被選擇,選中即可。
7
,
???
點(diǎn)擊
Apply
。
8
,
???
重啟服務(wù)器。
?
?
五、優(yōu)化默認(rèn)執(zhí)行隊(duì)列線程
默認(rèn)情況下,一個(gè)新的
WebLogic
實(shí)例配置了一個(gè)開發(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í)行包沒有在你的平臺(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)用程序比較小,通過遠(yuǎn)程調(diào)用處理的工作較多,這樣,客戶端會(huì)花費(fèi)更多的時(shí)間連接,因此,與能完成大量客戶端任務(wù)的客戶應(yīng)用程序相比,會(huì)需要更多的線程數(shù)。
如果你的工作不需要使用超過15個(gè)線程(開發(fā)模式默認(rèn))或者25個(gè)線程(產(chǎn)品模式默認(rèn)),就不要改變這個(gè)屬性的值。通常,如果你的應(yīng)用程序訪問數(shù)據(jù)庫花很長(zhǎng)時(shí)間才返回結(jié)果,與訪問數(shù)據(jù)庫很短時(shí)間就返回的應(yīng)用程序比較,你會(huì)需要更多的執(zhí)行線程。從后者來看,用少點(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ì)列中的吞吐量開始減少。)
注意:
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ù)量
|
過多的上下文轉(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ù)器沒有運(yùn)行,先啟動(dòng)。
2.??? 訪問管理控制臺(tái)。
3.??? 展開左邊面板的Servers 節(jié)點(diǎn),顯示域服務(wù)。
4.??? 右擊服務(wù)名稱,在彈出菜單中選擇View Execute Queues ,就會(huì)在右邊面板顯示有執(zhí)行隊(duì)列的表用來修改。
注意:你只能修改默認(rèn)的執(zhí)行隊(duì)列或者用戶定義的執(zhí)行隊(duì)列。
5.??? 在Name列,直接點(diǎn)擊默認(rèn)執(zhí)行隊(duì)列名稱,顯示配置標(biāo)簽用來修改執(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ì)列可以提供更多的管理控制。通過使用多執(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ì)列的方法是通過管理控制臺(tái),配置步驟如下:
1
.
???
啟動(dòng)管理服務(wù)器,訪問控制臺(tái)。
2
.
???
展開左邊面板中
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ā)來請(qǐng)求的最大數(shù),
65536
個(gè)請(qǐng)求是個(gè)很大的數(shù),即使達(dá)到這個(gè)最大數(shù),也是很少見的。
如果達(dá)到最大隊(duì)列長(zhǎng)度,
WebLogic
會(huì)自動(dòng)成倍增長(zhǎng)隊(duì)列大小,以處理額外的工作。
注意:超過
65536
個(gè)請(qǐng)求預(yù)示隊(duì)列中的線程有問題,不僅僅只是隊(duì)列本身的長(zhǎng)度問題,實(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ù)。如果你不需要使用超過
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)建過多的線程數(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
元素。
然而你也可以通過使用
appc
編譯器
-
dispatchPolicy
選項(xiàng)來設(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
讀,你仍然可以通過配置恰當(dāng)?shù)膱?zhí)行線程數(shù)以提高
socket
通信性能,為每個(gè)服務(wù)器實(shí)例和客戶機(jī)器擔(dān)負(fù)
socket
讀線程的任務(wù)。
Socket
讀占線程池百分比(
ThreadPoolPercentSocketReader
)屬性可以設(shè)置用來從
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ù)器,訪問域控制臺(tái)。
2
.
???
展開左邊面板
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
讀,需要通過用
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ù)用來保護(hù)服務(wù)器在響應(yīng)過載情況下過度分配線程數(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ù)不斷的工作(沒有空閑)。你可以調(diào)整服務(wù)器線程監(jiān)測(cè)行為,它是通過改變堵塞線程被診斷前的時(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
,訪問管理控制臺(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
周期性的掃描線程以察覺它們是否連續(xù)不斷運(yùn)行了某一線程的時(shí)間達(dá)到通過堵塞線程最大時(shí)間屬性指定的時(shí)間長(zhǎng)度。默認(rèn)時(shí)間間隔為
600
秒。
5
.
???
應(yīng)用(
Apply
)設(shè)置。
6
.
???
重啟服務(wù)器。
六、優(yōu)化連接緩存
Config.xml
文件中的元素接受緩存數(shù)(
AcceptBacklog
)屬性是用來設(shè)定請(qǐng)求
WebLogic
實(shí)例的連接數(shù),在拒絕額外的請(qǐng)求之前,能接受設(shè)定的緩存數(shù)。
AcceptBacklog
屬性指定有多少
TCP
連接緩存在等待隊(duì)列,這個(gè)固定的隊(duì)列存放了
TCP
堆棧已經(jīng)收到但應(yīng)用程序還沒有收到的連接請(qǐng)求。默認(rèn)值是
50
,最大值由操作系統(tǒng)決定。
在控制臺(tái)調(diào)整接受緩存數(shù)的步驟:
1.
???
啟動(dòng)
WebLogic
,訪問控制臺(tái)。
2.
???
展開左邊面板
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ù)器端也沒有錯(cuò)誤消息,說明接受緩存的值可能太小。
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ù)庫不斷的連接和斷開,這種創(chuàng)建方式會(huì)造成一個(gè)重大的性能問題。
WebLogic
連接池提供了一種高效的解決方案來解決這個(gè)問題。
當(dāng)啟動(dòng)
WebLogic
,就打開連接池,以便于所有客戶連接。當(dāng)一個(gè)客戶關(guān)閉一個(gè)連接,這個(gè)連接就返回到連接池,供其他的客戶使用。連接本身不會(huì)關(guān)閉。如此就用極少的代價(jià)實(shí)現(xiàn)了連接和斷開連接池。
在連接池里應(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ù)庫連接。如果服務(wù)器不能創(chuàng)建這個(gè)連接數(shù),連接池的創(chuàng)建就會(huì)失敗。
在開發(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ù)庫連接。當(dāng)服務(wù)器處于低負(fù)荷時(shí),所有的資源應(yīng)該是盡快的完成請(qǐng)求,而不是創(chuàng)建新的數(shù)據(jù)庫連接。
7
.
2
調(diào)整
JDBC
連接池的最大容量
JDBCConnectonPool
元素中的
MaxCapacity
屬性設(shè)置連接池包含的最大的物理數(shù)據(jù)庫連接數(shù)。不同的
JDBC
驅(qū)動(dòng)程序和數(shù)據(jù)庫服務(wù)器可能限制物理連接數(shù)。
默認(rèn)的最大容量數(shù)與默認(rèn)的線程數(shù)相等:開發(fā)模式為
15
,產(chǎn)品模式為
25
。不過,在產(chǎn)品模式下,建議連接數(shù)與當(dāng)前的客戶會(huì)話(
Session
)數(shù)相等。在服務(wù)器端,連接池的容量與執(zhí)行線程數(shù)是無關(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
通過控制臺(tái)改變編譯器
1.
???
啟動(dòng)服務(wù)器,訪問控制臺(tái)。
2.
???
展開左邊面板
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
)把完全路徑通過
Classpath
框輸入到
JRE rt.jar
庫。如:
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)志來使用自有的線程。
九、使用
WebLogic
集群提高性能
WebLogic
集群是指一組
WebLogic
實(shí)例在一起提供具有防過載和自有復(fù)制的功能,以用一個(gè)域?yàn)樗锌蛻糁С挚缮炜s的高可用性運(yùn)行。集群對(duì)于客戶是一個(gè)單一的服務(wù)器,但實(shí)際上是一組服務(wù)器來提高可靠性和可伸縮性。
9
.
1
可伸縮性和高的可用性
可伸縮性是系統(tǒng)增加一個(gè)或更多部件作為系統(tǒng)資源的能力。很典型的是,這些部件使并發(fā)用戶得到支持,使并發(fā)事務(wù)能在特定的時(shí)間單位能被處理。
假定應(yīng)用程序設(shè)計(jì)良好,它完全可以簡(jiǎn)單的增加更多的資源來提高性能。為了增加
WebLogic
處理的負(fù)荷量,只需增加一個(gè)
WebLogic
實(shí)例到你的集群――不需改變應(yīng)用程序。集群提高兩個(gè)關(guān)鍵的好處:可伸縮性和可用性,這是單一服務(wù)器無法比擬的。
WebLogic
集群給
J2EE
帶來了可伸縮性和高的可用性,而且對(duì)于應(yīng)用程序的開發(fā)者是透明的。可伸縮性擴(kuò)展了中間層的能力,超過了單一的
WebLogic
服務(wù)器或單一的計(jì)算機(jī)能處理的。集群成員唯一的限制是所有
WebLogic
必須要用
IP
多點(diǎn)傳送通信。新的
WebLogic
能動(dòng)態(tài)的增加到集群,以增加處理能力。
WebLogic
集群保證高的可用性是通過多個(gè)服務(wù)器的冗余,減少客戶的請(qǐng)求失敗。集群中多個(gè)服務(wù)器能提供同一服務(wù)。如果一個(gè)服務(wù)器停止運(yùn)行,另一個(gè)能接替運(yùn)行。這種功能為客戶增加了可用性。
警告:如果你要解決應(yīng)用程序和環(huá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)考慮的性能問題
多處理器的機(jī)器上,必須考慮群集
WebLogic
實(shí)例數(shù)應(yīng)與
CPU
的數(shù)量成比例。因?yàn)?/span>
WebLogic
沒有內(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)。通過控制臺(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ù)來衡量的。
n
????????
隊(duì)列長(zhǎng)度,根據(jù)隊(duì)列中等待請(qǐng)求數(shù)來衡量的。
n
????????
JVM
堆還有的內(nèi)存量。
jwebee
我的個(gè)人網(wǎng)站
posted on 2007-04-19 13:32
周行 閱讀(3452)
評(píng)論(2) 編輯 收藏 所屬分類:
IT技術(shù)