Weblogic服務器性能調優

       注:在下面做的介紹都是以Weblogic8.1為例的,其它版本的Weblogic可能會有些許不同。

       1) 設置JAVA參數;

       a) 編輯Weblogic Server啟動腳本文件;

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=-Xms256m –Xmx256m

c) 保存,重啟即可。

注:在WebLogic中,為了獲得更好的性能,BEA公司推薦最小Java堆等于最大Java堆。

2) 開發模式 vs. 產品模式;

開發模式和產品模式的一些參數的默認值不同,可能會對性能造成影響,下面是對性能有影響的參數列表:

參數

開發模式默認值

產品模式默認值

Execute Queue: Thread Count

15 threads

25 threads

JDBC Connection Pool: MaxCapacity

15 connnections

25 connections

       通過啟動管理控制臺,在域(如:mydomain> 配置 > 常規選擇產品模式。

3) 盡量開啟本地I/O

通過啟動管理控制臺,在域(如:mydomain> 服務器 > server實例(如:myserver> 配置 > 調整選擇啟用本地I/O

注:此值也可通過手動的修改config.xml配置文件。

4) 調優執行隊列線程;

a) 修改默認執行線程數

在這里,執行隊列的線程數表示執行隊列能夠同時執行的操作的數量。但此值不是設的越大越好,應該恰到好處的去設置它,太小了,執行隊列中將會積累很多待處理的任務,太大了,則會消耗大量的系統資源從而影響整體的性能。在產品模式下默認為25個執行線程。

為了設置理想的執行隊列的線程數,我們可以啟動管理控制臺,在域(如:mydomain> 服務器 > server實例(如:myserver> 監視 > 性能中監控最大負載時執行隊列的吞吐量和隊列中的等待請求數,據此確定理想的數值。

       理想的默認執行線程數是由多方面的因素決定的,比如機器CPU性能、總體體系架構、I/O、操作系統的進程調度機制、JVM的線程調度機制。隨著CPU個數的增加,WebLogic可以近乎線性地提高線程數。線程數越多,花費在線程切換的時間也就越多;線程數越小,CPU可能無法得到充分的利用。為獲取一個理想的線程數,需要經過反復的測試。在測試中,可以以25*CPU個數為基準進行調整。當空閑線程較少,CPU利用率較低時,可以適當增加線程數的大小(每五個遞增)。對于PC ServerWindows 2000,則最好每個CPU小于50個線程,以CPU利用率為90%左右為最佳。

       通過啟動管理控制臺,在域(如:mydomain> 服務器 > server實例(如:myserver> Execute Queue > weblogic.kernel.Defalt > 配置中修改線程計數。

       b) 設定執行隊列的溢出條件;

       Weblogic Server提供給默認的執行隊列或用戶自定義的執行隊列自定義溢出條件的功能,當滿足此溢出條件時,服務器改變其狀態為“警告”狀態,并且額外的再分配一些線程去處理在隊列中的請求,而達到降低隊列長度的目的。

       通過啟動管理控制臺,在域(如:mydomain> 服務器 > server實例(如:myserver> Execute Queue > weblogic.kernel.Defalt > 配置下面幾項:

l         隊列長度:此值表示執行隊列中可容納的最大請求數,默認值是65536,最后不要手動改變此值。

l         隊列長度閾值百分比:此值表示溢出條件,在此服務器指出隊列溢出之前可以達到的隊列長度大小的百分比。

l         線程數增加:當檢測到溢出條件時,將增加到執行隊列中的線程數量。如果CPU和內存不是足夠的高,盡量不要改變默認值“0”。因為Weblogic一旦增加后不會自動縮減,雖然最終可能確實起到了降低請求的作用,但在將來的運行中將影響程序的性能。

l         最大線程數:為了防止創建過多的線程數量,可以通過設定最大的線程數進行控制。

在實際的應用場景中,應根據具體情況適當的調整以上參數。

c) 設定執行隊列監測行為

Weblogic Server能夠自動監測到當一個執行線程變為“阻塞”。變為“阻塞”狀態的執行線程將無法完成當前的工作,也無法再執行新請求。如果執行隊列中的所有執行線程都變為“阻塞”狀態,Weblogic server可能改變狀態為“警告”或“嚴重”狀態。如果Weblogic server變為“嚴重”狀態,可以通過Node Manager來自動關閉此服務器并重新啟動它。具體請參考:Node Manager Capabilities文檔。

通過啟動管理控制臺,在域(如:mydomain> 服務器 > server實例(如:myserver>配置 > 調整下可配置下面幾項:

l         阻塞線程最長時間:在此服務器將線程診斷為阻塞線程之前,線程必須連續工作的時間長度()。默認情況下,WebLogic Server 認為線程在連續工作 600 秒后成為阻塞線程。

l         阻塞線程計時器間隔:WebLogic Server 定期掃描線程以查看它們是否已經連續工作了 "阻塞線程最長時間" 字段中指定的時間長度的間隔時間()。默認情況下,WebLogic Server 將此時間間隔設置為 600 秒。

5) 調優TCP連接緩存數;

WebLogic ServerAccept Backlog參數規定服務器向操作系統請求的隊列大小,默認值為50。當系統重載負荷時,這個值可能過小,日志中報Connection Refused,導致有效連接請求遭到拒絕,此時可以提高Accept Backlog 25%直到連接拒絕錯誤消失。對于Portal類型的應用,默認值往往是不夠的。Login TimeoutSSL Login Timeout參數表示普通連接和SSL連接的超時時間,如果客戶連接被服務器中斷或者SSL容量大,可以嘗試增加該值。

通過啟動管理控制臺,在域(如:mydomain> 服務器 > server實例(如:myserver>配置 > 調整下可配置“接受預備連接”。

6) 改變Java編譯器;

標準的Java編譯器是javac,但編譯JSP servlets速度太慢,為了提高編譯速度,可以使用sjjikes編譯器取代javac編譯器。下面說說更改Java編譯器:

通過啟動管理控制臺,在域(如:mydomain> 服務器 > server實例(如:myserver>配置 > 常規下改變Java 編譯器,默認為javac。輸入完整路徑,如:c:\visualcafe31\bin\sj.exe。然后打開高級選項,在預規劃到類路徑填寫編譯 Java 代碼時為 Java 編譯器類路徑預規劃的選項,如:BEA_HOME\jdk141_02\jre\lib\rt.jar

7) 使用Webogic Server集群提高性能;

具體關于如何配置Weblogic集群,我就不細說了。詳情可參考:Introduction to WebLogic Server Clustering

8) Weblogic EJB調優

由于EJB2.0已經很少項目在用了,EJB3.0再成熟一點,我再補充這一部分吧!

9) JDBC應用調優

JDBC Connection Pool的調優受制于WebLogic Server線程數的設置和數據庫進程數,游標的大小。通常我們在一個線程中使用一個連接,所以連接數并不是越多越好,為避免兩邊的資源消耗,建議設置連接池的最大值等于或者略小于線程數。同時為了減少新建連接的開銷,將最小值和最大值設為一致。

增加Statement Cache Size對于大量使用PreparedStatement對象的應用程序很有幫助,WebLogic能夠為每一個連接緩存這些對象,此值默認為10。在保證數據庫游標大小足夠的前提下,可以根據需要提高Statement Cache Size。比如當你設置連接數為25,Cache Size10,數據庫可能需要打開25*10=250個游標。不幸的是,當遇到與PreparedStatement Cache有關的應用程序錯誤時,你需要將Cache Size設置為0

盡管JDBC Connection Pool提供了很多高級參數,在開發模式下比較有用,但大部分在生產環境下不需調整。這里建議最好不要設置測試表, 同時Test Reserved ConnectionsTest Released Connections也無需勾上。 當然如果你的數據庫不穩定,時斷時續,你就可能需要上述的參數打開。

最后提一下驅動程序類型的選擇,Oracle為例,Oracle提供thin驅動和oci驅動,從性能上來講,oci驅動強于thin驅動,特別是大數據量的操作。但在簡單的數據庫操作中,性能相差不大,隨著thin驅動的不斷改進,這一弱勢將得到彌補。而thin驅動的移植性明顯強于oci驅動。所以在通常情況下建議使用thin驅動。而最新驅動器由于WebLogic server/bin目錄下的類包可能不是最新的,請以Oracle網站為準: http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html

10) JSP調優

l         設置jsp-param pageCheckSeconds=-1

l         設置serlet-reload-check=-1ServletReloadCheckSecs=-1

l         設置jsp-param precompile=true,關閉JSP預編譯選項。