Weblogic服務(wù)器性能調優(yōu)
注:在下面做的介紹都是以Weblogic8.1為例的,其它版本的Weblogic可能會(huì )有些許不同。
1) 設置JAVA參數;
a) 編輯Weblogic Server啟動(dòng)腳本文件;
l BEA_HOME\user_projects\domains\domain-name\startWebLogic.cmd(startWebLogic.sh on Unix)
l BEA_HOME\user_projects\domains\domain-name\startManagedWebLogic.cmd(startManagedWebLogic.sh on Unix)
b) 編輯set JAVA_OPTIONS命令,如:set JAVA_OPTIONS=-Xms
c) 保存,重啟即可。
注:在WebLogic中,為了獲得更好的性能,BEA公司推薦最小Java堆等于最大Java堆。
2) 開(kāi)發(fā)模式 vs. 產(chǎn)品模式;
開(kāi)發(fā)模式和產(chǎn)品模式的一些參數的默認值不同,可能會(huì )對性能造成影響,下面是對性能有影響的參數列表:
| 參數 | 開(kāi)發(fā)模式默認值 | 產(chǎn)品模式默認值 |
| Execute Queue: Thread Count | 15 threads | 25 threads |
| JDBC Connection Pool: MaxCapacity | 15 connnections | 25 connections |
通過(guò)啟動(dòng)管理控制臺,在域(如:mydomain)> 配置 > 常規選擇產(chǎn)品模式。
3) 盡量開(kāi)啟本地I/O;
通過(guò)啟動(dòng)管理控制臺,在域(如:mydomain)> 服務(wù)器 > server實(shí)例(如:myserver)> 配置 > 調整選擇啟用本地I/O。
注:此值也可通過(guò)手動(dòng)的修改config.xml配置文件。
4) 調優(yōu)執行隊列線(xiàn)程;
a) 修改默認執行線(xiàn)程數
在這里,執行隊列的線(xiàn)程數表示執行隊列能夠同時(shí)執行的操作的數量。但此值不是設的越大越好,應該恰到好處的去設置它,太小了,執行隊列中將會(huì )積累很多待處理的任務(wù),太大了,則會(huì )消耗大量的系統資源從而影響整體的性能。在產(chǎn)品模式下默認為25個(gè)執行線(xiàn)程。
為了設置理想的執行隊列的線(xiàn)程數,我們可以啟動(dòng)管理控制臺,在域(如:mydomain)> 服務(wù)器 > server實(shí)例(如:myserver)> 監視 > 性能中監控最大負載時(shí)執行隊列的吞吐量和隊列中的等待請求數,據此確定理想的數值。
理想的默認執行線(xiàn)程數是由多方面的因素決定的,比如機器CPU性能、總體體系架構、I/O、操作系統的進(jìn)程調度機制、JVM的線(xiàn)程調度機制。隨著(zhù)CPU個(gè)數的增加,WebLogic可以近乎線(xiàn)性地提高線(xiàn)程數。線(xiàn)程數越多,花費在線(xiàn)程切換的時(shí)間也就越多;線(xiàn)程數越小,CPU可能無(wú)法得到充分的利用。為獲取一個(gè)理想的線(xiàn)程數,需要經(jīng)過(guò)反復的測試。在測試中,可以以25*CPU個(gè)數為基準進(jìn)行調整。當空閑線(xiàn)程較少,CPU利用率較低時(shí),可以適當增加線(xiàn)程數的大?。课鍌€(gè)遞增)。對于PC Server和Windows 2000,則最好每個(gè)CPU小于50個(gè)線(xiàn)程,以CPU利用率為90%左右為最佳。
通過(guò)啟動(dòng)管理控制臺,在域(如:mydomain)> 服務(wù)器 > server實(shí)例(如:myserver)> Execute Queue > weblogic.kernel.Defalt > 配置中修改線(xiàn)程計數。
b) 設定執行隊列的溢出條件;
Weblogic Server提供給默認的執行隊列或用戶(hù)自定義的執行隊列自定義溢出條件的功能,當滿(mǎn)足此溢出條件時(shí),服務(wù)器改變其狀態(tài)為“警告”狀態(tài),并且額外的再分配一些線(xiàn)程去處理在隊列中的請求,而達到降低隊列長(cháng)度的目的。
通過(guò)啟動(dòng)管理控制臺,在域(如:mydomain)> 服務(wù)器 > server實(shí)例(如:myserver)> Execute Queue > weblogic.kernel.Defalt > 配置下面幾項:
l 隊列長(cháng)度:此值表示執行隊列中可容納的最大請求數,默認值是65536,最后不要手動(dòng)改變此值。
l 隊列長(cháng)度閾值百分比:此值表示溢出條件,在此服務(wù)器指出隊列溢出之前可以達到的隊列長(cháng)度大小的百分比。
l 線(xiàn)程數增加:當檢測到溢出條件時(shí),將增加到執行隊列中的線(xiàn)程數量。如果CPU和內存不是足夠的高,盡量不要改變默認值“0”。因為Weblogic一旦增加后不會(huì )自動(dòng)縮減,雖然最終可能確實(shí)起到了降低請求的作用,但在將來(lái)的運行中將影響程序的性能。
l 最大線(xiàn)程數:為了防止創(chuàng )建過(guò)多的線(xiàn)程數量,可以通過(guò)設定最大的線(xiàn)程數進(jìn)行控制。
在實(shí)際的應用場(chǎng)景中,應根據具體情況適當的調整以上參數。
c) 設定執行隊列監測行為
Weblogic Server能夠自動(dòng)監測到當一個(gè)執行線(xiàn)程變?yōu)?#8220;阻塞”。變?yōu)?#8220;阻塞”狀態(tài)的執行線(xiàn)程將無(wú)法完成當前的工作,也無(wú)法再執行新請求。如果執行隊列中的所有執行線(xiàn)程都變?yōu)?#8220;阻塞”狀態(tài),Weblogic server可能改變狀態(tài)為“警告”或“嚴重”狀態(tài)。如果Weblogic server變?yōu)?#8220;嚴重”狀態(tài),可以通過(guò)Node Manager來(lái)自動(dòng)關(guān)閉此服務(wù)器并重新啟動(dòng)它。具體請參考:Node Manager Capabilities文檔。
通過(guò)啟動(dòng)管理控制臺,在域(如:mydomain)> 服務(wù)器 > server實(shí)例(如:myserver)>配置 > 調整下可配置下面幾項:
l 阻塞線(xiàn)程最長(cháng)時(shí)間:在此服務(wù)器將線(xiàn)程診斷為阻塞線(xiàn)程之前,線(xiàn)程必須連續工作的時(shí)間長(cháng)度(秒)。默認情況下,WebLogic Server 認為線(xiàn)程在連續工作 600 秒后成為阻塞線(xiàn)程。
l 阻塞線(xiàn)程計時(shí)器間隔:WebLogic Server 定期掃描線(xiàn)程以查看它們是否已經(jīng)連續工作了 "阻塞線(xiàn)程最長(cháng)時(shí)間" 字段中指定的時(shí)間長(cháng)度的間隔時(shí)間(秒)。默認情況下,WebLogic Server 將此時(shí)間間隔設置為 600 秒。
5) 調優(yōu)TCP連接緩存數;
WebLogic Server用Accept Backlog參數規定服務(wù)器向操作系統請求的隊列大小,默認值為50。當系統重載負荷時(shí),這個(gè)值可能過(guò)小,日志中報Connection Refused,導致有效連接請求遭到拒絕,此時(shí)可以提高Accept Backlog 25%直到連接拒絕錯誤消失。對于Portal類(lèi)型的應用,默認值往往是不夠的。Login Timeout和SSL Login Timeout參數表示普通連接和SSL連接的超時(shí)時(shí)間,如果客戶(hù)連接被服務(wù)器中斷或者SSL容量大,可以嘗試增加該值。
通過(guò)啟動(dòng)管理控制臺,在域(如:mydomain)> 服務(wù)器 > server實(shí)例(如:myserver)>配置 > 調整下可配置“接受預備連接”。
6) 改變Java編譯器;
標準的Java編譯器是javac,但編譯JSP servlets速度太慢,為了提高編譯速度,可以使用sj或jikes編譯器取代javac編譯器。下面說(shuō)說(shuō)更改Java編譯器:
通過(guò)啟動(dòng)管理控制臺,在域(如:mydomain)> 服務(wù)器 > server實(shí)例(如:myserver)>配置 > 常規下改變Java 編譯器,默認為javac。輸入完整路徑,如:c:\visualcafe31\bin\sj.exe。然后打開(kāi)高級選項,在預規劃到類(lèi)路徑填寫(xiě)編譯 Java 代碼時(shí)為 Java 編譯器類(lèi)路徑預規劃的選項,如:BEA_HOME\jdk141_02\jre\lib\rt.jar。
7) 使用Webogic Server集群提高性能;
具體關(guān)于如何配置Weblogic集群,我就不細說(shuō)了。詳情可參考:Introduction to WebLogic Server Clustering。
8) Weblogic EJB調優(yōu)
由于EJB2.0已經(jīng)很少項目在用了,EJB3.0再成熟一點(diǎn),我再補充這一部分吧!
9) JDBC應用調優(yōu)
JDBC Connection Pool的調優(yōu)受制于WebLogic Server線(xiàn)程數的設置和數據庫進(jìn)程數,游標的大小。通常我們在一個(gè)線(xiàn)程中使用一個(gè)連接,所以連接數并不是越多越好,為避免兩邊的資源消耗,建議設置連接池的最大值等于或者略小于線(xiàn)程數。同時(shí)為了減少新建連接的開(kāi)銷(xiāo),將最小值和最大值設為一致。
增加Statement Cache Size對于大量使用PreparedStatement對象的應用程序很有幫助,WebLogic能夠為每一個(gè)連接緩存這些對象,此值默認為10。在保證數據庫游標大小足夠的前提下,可以根據需要提高Statement Cache Size。比如當你設置連接數為25,Cache Size為10時(shí),數據庫可能需要打開(kāi)25*10=250個(gè)游標。不幸的是,當遇到與PreparedStatement Cache有關(guān)的應用程序錯誤時(shí),你需要將Cache Size設置為0。
盡管JDBC Connection Pool提供了很多高級參數,在開(kāi)發(fā)模式下比較有用,但大部分在生產(chǎn)環(huán)境下不需調整。這里建議最好不要設置測試表, 同時(shí)Test Reserved Connections和Test Released Connections也無(wú)需勾上。 當然如果你的數據庫不穩定,時(shí)斷時(shí)續,你就可能需要上述的參數打開(kāi)。
最后提一下驅動(dòng)程序類(lèi)型的選擇,以Oracle為例,Oracle提供thin驅動(dòng)和oci驅動(dòng),從性能上來(lái)講,oci驅動(dòng)強于thin驅動(dòng),特別是大數據量的操作。但在簡(jiǎn)單的數據庫操作中,性能相差不大,隨著(zhù)thin驅動(dòng)的不斷改進(jìn),這一弱勢將得到彌補。而thin驅動(dòng)的移植性明顯強于oci驅動(dòng)。所以在通常情況下建議使用thin驅動(dòng)。而最新驅動(dòng)器由于WebLogic server/bin目錄下的類(lèi)包可能不是最新的,請以Oracle網(wǎng)站為準: http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html。
10) JSP調優(yōu)
l 設置jsp-param pageCheckSeconds=-1;
l 設置serlet-reload-check=-1或ServletReloadCheckSecs=-1;
l 設置jsp-param precompile=true,關(guān)閉JSP預編譯選項。

