優化 WebLogic

dvlue發表於2010-11-19
[quote]原帖由 [i]mfkqwyc86[/i] 於 2010-10-27 12:03 發表 [url=http://www.itpub.net/redirect.php?goto=findpost&pid=16648084&ptid=1361918][img]http://www.itpub.net/images/common/back.gif[/img][/url]
優化 WebLogic
提要:
1         為 WebLogic 啟動設定 Java 引數。
2        設定與效能有關的配置引數。
3          調整開發與產品模式預設值。
4          使用 WebLogic “自有的 IO ”效能包。
5          優化預設執行佇列執行緒。
6          優化連線快取。
7         如何提高 JDBC 連線池的效能。
8          設定 Java 編譯器。
9          使用 WebLogic 叢集提高效能。
10         監視 WebLogic 域。


WebLogic 配置檔案(config.xml)包含了大量很直觀的與效能有關的引數,能通過配置環境與應用程式得到很好的優化。基於系統的需要調整這些引數不僅能改善單個點的效能,而且能提高整個應用程式效能的可衡量性。
試著採用下列WebLogic配置方法,或許能使你的系統達到最佳狀態:
一 修改執行佇列執行緒數的值。在WebLogic 中佇列元素的執行緒數等於同時佔用執行佇列的應用程式的數目。當任務加入一個WebLogic 例項,它就被放到執行佇列中,然後分配給任務一個執行緒來執行。執行緒消耗資源,因此要小心處理這個屬性——增加不需要的值,會降低效能。
二,如果可能,使用自帶的效能包(NativeIOEnabled=true)。
三,使用特定的應用程式執行佇列。
四,使用JDBC連線池時,修改下列屬性:
n         驅動名稱:使用小的驅動或者jDriver。
n         初始容量:設為與最大容量相同的值。
n         最大容量:其值至少應與執行緒數相同。
五,把連線池的大小設為與執行佇列的執行緒數相同。
六,設定緩衝。
七,為Servlet和JSP使用多個執行佇列。
八,改變JSP預設的Java編譯器,javac 比jikes或sj要慢。

優化 WebLogic
提要:
n          為 WebLogic 啟動設定 Java 引數。
n          設定與效能有關的配置引數。
n          調整開發與產品模式預設值。
n          使用 WebLogic “自有的 IO ”效能包。
n          優化預設執行佇列執行緒。
n          優化連線快取。
n          如何提高 JDBC 連線池的效能。
n          設定 Java 編譯器。
n          使用 WebLogic 叢集提高效能。
n          監視 WebLogic 域。
一、為 WebLogic 啟動設定 Java 引數
只要啟動 WebLogic ,就必須指定 Java 引數,簡單來說,通過 WebLogic.Server 域的命令列就可以完成,不過,由於這樣啟動的過程冗長並且易於出錯, BEA 公司推薦你把這個命令寫進指令碼里。為了簡化這個過程,你可以修改樣例指令碼里的預設值,樣例指令碼是提供 WebLogic 啟動伺服器的。
如果你用配置嚮導建立你的域, WebLogic 啟動指令碼( startWebLogic.cmd )放在 domain-name 目錄裡。預設情況下,這個目錄是 BEA_HOME\user_projects\domain\domain-name , BEA_HOME 表示安裝路徑, domain-name 是在配置模板中設定的域名稱。
你需要在這個指令碼中修改一些預設的 Java 引數值,使之適合你的應用環境和程式。在這個檔案中主要的效能引數是 JAVA_HOME 和 Java 堆的大小。
n          設 JAVA_HOME 的值為 JDK 所在的位置,如:
set JAVA_HOME=C:\bea\jdk141_03
n          為得到高效能的吞吐量,把 Java 堆的最小值與最大值設為相等。如:
"%JAVA_HOME%\bin\java" -hotspot -Xms512m -Xmx512m -classpath %CLASSPATH% -
二、設定與效能有關的配置引數
在一個 WebLogic 域中,配置檔案( config.xml )位於與管理伺服器通訊的機器裡,提供 WebLogic MBean 的長期儲存。管理伺服器作為連線的中心點,為服務例項與系統管理工具提供服務。域也可以包括其他的 WebLogic 例項,稱之為從服務,主要為應用程式提供服務。
當啟動管理伺服器是,首先讀域配置檔案,然後跳過建立在配置檔案中管理 MBean 預設的屬性值,每一次用系統管理工具(不管是命令列介面還是管理控制檯)改變一個屬性值,它都會被存到相應的管理 MBean ,並且寫進配置檔案。
下表列出了 config.xml 檔案中影響伺服器效能的引數。

元素

屬性

控制檯標籤

備註

Server

NativeIOEnabled

Native IO Enabled

ExecuteQueue

ThreadCount

Thread Count


ExecuteQueue

QueueLength
QueueLengthThresholdPercent
ThreadsIncrease
ThreadsMaximum
ThreadPriority

Queue Length
Queue Length Threshold Percent
(佇列長限度百分比)
Threads Increase
Threads Maximum
Thread Priority

Server

StuckThreadMaxTime
StuckThreadTimerInteral

Stuck Thread Max Time
(堵塞執行緒的最長時間)
Stuck Thread Timer Interval
(堵塞執行緒的時間間隔)


Server

ThreadPoolPercentSocketReaders

Socket Readers


Server

AcceptBacklog

Accept Backlog
(接受快取數)


JDBCConnectionPool

InitialCapacity
MaxCapacity

Initial Capacity
Max Capacity


JDBCConnectionPool

StatementCacheSize

Statement Cache Size
(宣告高速緩衝大小)


三、調整開發模式與產品模式預設值
你可以指定域為開發環境或為產品環境。 WebLogic 會根據你指定的環境型別使用不同的預設值提供不同的服務。
下表列出了兩種模式下的預設值

優化引數

開發模式

產品模式

Execute Queue: ThreadCount

15 threads

25 threads

JDBC Connection Pool: MaxCapacity

15 connections

25 connections
六、優化連線快取
Config.xml 檔案中的元素接受快取數( AcceptBacklog )屬性是用來設定請求 WebLogic 例項的連線數,在拒絕額外的請求之前,能接受設定的快取數。 AcceptBacklog 屬性指定有多少 TCP 連線快取在等待佇列,這個固定的佇列存放了 TCP 堆疊已經收到但應用程式還沒有收到的連線請求。預設值是 50 ,最大值由作業系統決定。
在控制檯調整接受快取數的步驟:
1.     啟動 WebLogic ,訪問控制檯。
2.     展開左邊皮膚 Servers 節點。
3.     點選你要配置的伺服器例項的名稱。
4.     選擇配置( Configuration )―― > 調整( Tuning )標籤。
5.     根據需要修改預設的接受快取數( Accept Backlog ):
n          在執行期間,如果許多客戶端連線得不到響應或被拒絕,並且伺服器端也沒有錯誤訊息,說明接受快取的值可能太小。
n          在你訪問 WebLogic 時,如果收到“拒絕連線( connection refused )”的提示,則應該增加接受快取的預設值的 25 %。繼續增加其值的 25 %,直到停止出現這樣的提示。
6.     點選應用( Apply ),儲存設定。

七、如何提高 JDBC 連線池的效能
建立一個帶 DBMS 的 JDBC 連線是非常慢的。如果應用程式需要資料庫不斷的連線和斷開,這種建立方式會造成一個重大的效能問題。 WebLogic 連線池提供了一種高效的解決方案來解決這個問題。
當啟動 WebLogic ,就開啟連線池,以便於所有客戶連線。當一個客戶關閉一個連線,這個連線就返回到連線池,供其他的客戶使用。連線本身不會關閉。如此就用極少的代價實現了連線和斷開連線池。
在連線池裡應該建立多少連線呢?連線池會根據配置引數中的最大數與最小數之間增加或減少連線。最好的效能應該是連線數與當前客戶會話( Session )數相同。
7 . 1 調整 JDBC 連線池的初始容量
在配置連線池時, JDBCConnectionPool 元素中的 InitialCapacity 屬效能設定連線數,建立物理的資料庫連線。如果伺服器不能建立這個連線數,連線池的建立就會失敗。
在開發期間,為了使伺服器啟動更快,可以很方便的設定 InitialCapacity 屬性的值小一點。在產品系統中,就應該把 InitialCapacity 的值設為與 MaxCapacity 值相同,預設產品模式的值為 25 。這樣,在伺服器啟動時,所有的連線就會被建立。如果你調整了 MaxCapacity 值後,一定要確信 InitialCapacity 值設定與 MaxCapacity 值相同。
如果 InitialCapacity 比 MaxCapacity 值少,當負荷增加時,伺服器需要建立額外的資料庫連線。當伺服器處於低負荷時,所有的資源應該是儘快的完成請求,而不是建立新的資料庫連線。
7 . 2 調整 JDBC 連線池的最大容量
JDBCConnectonPool 元素中的 MaxCapacity 屬性設定連線池包含的最大的物理資料庫連線數。不同的 JDBC 驅動程式和資料庫伺服器可能限制物理連線數。
預設的最大容量數與預設的執行緒數相等:開發模式為 15 ,產品模式為 25 。不過,在產品模式下,建議連線數與當前的客戶會話( Session )數相等。在伺服器端,連線池的容量與執行執行緒數是無關的,正在進行的使用者會話比執行執行緒更多。
八、設定 Java 編譯器
編譯 JSP Servlet 的標準 Java 編譯器是 javac 。你可以把 java 編譯器設定為 si 或 jikes 代替 javac ,這樣能極大的提高效能。下面討論設定步驟及其要考慮的事項。
8 . 1 通過控制檯改變編譯器
1.     啟動伺服器,訪問控制檯。
2.     展開左邊皮膚 Servers 節點。
3.     點選要配置的伺服器例項的名稱。
4.     選擇配置( Configuration )―― > 常規( General ),在 Java Compiler 編輯框輸入編譯器的完全路徑。如: c:\visualcafe31\bin\sj.exe
5.     點選高階選項( Advanced Option )―― >Show ,顯示其他的屬性。
6.     用新增( Append )把完全路徑通過 Classpath 框輸入到 JRE rt.jar 庫。如: BEA_HOME \jdk141_02\jre\lib\rt.jar
7.     點選應用。
8.     重啟伺服器。
8 . 2 在 Weblogic.xml 檔案中設定編譯器
n          使用 compileCommand 引數指定 Java 編譯器。
n          使用 procompile 引數配置 WebLogic ,在啟動 WebLogic 時預編譯 JSP 。
8 . 3 編譯 EJB 容器類
使用 Weblogic.appc 的功能去編譯 EJB2.0 和 1.1 容器類。如果編譯 Jar 檔案部署 EJB 容器,你必須使用 weblogic.appc 生成容器類。預設情況下, EJB 使用 javac 編譯器。為了得到跟好的效能,使用- compiler 標誌指定不同的編譯器(如 Symantec 公司的 sj )
8 . 4 在 UNIX 環境下編譯
在 UNIX 機器上編譯 JSP 檔案,如果收到下列錯誤訊息:
failed : java.io.IOException:Not enough space
試試下列一些或所有的解決方法:
n          如果你只有 256MB 的記憶體,增加更大的記憶體。
n          提高檔案描述檔案的限制,如:
set rlim_fd_max=4096
set rlim_fd_cur=1024
n          啟動 JVM 時,用- native 標誌來使用自有的執行緒。
九、使用 WebLogic 叢集提高效能
WebLogic 叢集是指一組 WebLogic 例項在一起提供具有防過載和自有複製的功能,以用一個域為所有客戶支援可伸縮的高可用性執行。叢集對於客戶是一個單一的伺服器,但實際上是一組伺服器來提高可靠性和可伸縮性。
9 . 1 可伸縮性和高的可用性
可伸縮性是系統增加一個或更多部件作為系統資源的能力。很典型的是,這些部件使併發使用者得到支援,使併發事務能在特定的時間單位能被處理。
假定應用程式設計良好,它完全可以簡單的增加更多的資源來提高效能。為了增加 WebLogic 處理的負荷量,只需增加一個 WebLogic 例項到你的叢集――不需改變應用程式。叢集提高兩個關鍵的好處:可伸縮性和可用性,這是單一伺服器無法比擬的。
WebLogic 叢集給 J2EE 帶來了可伸縮性和高的可用性,而且對於應用程式的開發者是透明的。可伸縮性擴充套件了中間層的能力,超過了單一的 WebLogic 伺服器或單一的計算機能處理的。叢集成員唯一的限制是所有 WebLogic 必須要用 IP 多點傳送通訊。新的 WebLogic 能動態的增加到叢集,以增加處理能力。
WebLogic 叢集保證高的可用性是通過多個伺服器的冗餘,減少客戶的請求失敗。叢集中多個伺服器能提供同一服務。如果一個伺服器停止執行,另一個能接替執行。這種功能為客戶增加了可用性。
警告:如果你要解決應用程式和環境的頸瓶問題,增加額外的伺服器到叢集,應該提供線性的可伸縮性。定基準和初始配置測試執行時,在移到叢集環境之前,應把應用隔離在單獨的伺服器上測試。
9 . 2 在多 CPU 機器上執行多伺服器例項,應考慮的效能問題
多處理器的機器上,必須考慮群集 WebLogic 例項數應與 CPU 的數量成比例。因為 WebLogic 沒有內建限制的伺服器例項數位於叢集裡,規模大的、多處理器伺服器,如 Sun 公司的 Sun Enterprise 10000 ,有著當作非常大的叢集或多叢集主機的潛能。
在決定最佳的伺服器與 CPU 比例前,徹底測試你的應用程式並確定如下:
n          網路要求   如果你發現 Web 應用程式是主要受網路 I/O 限制,在增加 CPU 數前,考慮測試網路的吞吐量。如果實際是網路 I/O 限制,安裝一個更快的網路介面卡( NIC )可以提供效能,而不是增加額外的 CPU ,因為在等著讀 socket 時,更多的 CPU 會處於閒置。
n          磁碟 I/O 要求    如果你發現 Web 應用程式主要受磁碟 I/O 限制。在配置額外的 CPU 前,就應該考慮增加磁碟轉速或單個磁碟。
總之,在配置額外的 CPU 前,必須確定 Web 應用程式是受 CUP 限制,而不是受網路或磁碟 I/O 限制。
對於受 CPU 限制的應用,最初在每個 CPU 上對一個 WebLogic 例項進行效能測試。如果 CPU 利用率是一致的或者接近 100 %,然後增加 CPU 比重(例如,為一個 WebLogic 例項配置兩個 CUP ),記住在產品模式下,應該有一些空閒的 CPU 週期存在去執行管理任務。
雖然 Web 應用程式的處理需求變化多端,但 BEA 公司發現 WebLogic 例項與 CPU 最理想的比例是 1 : 2 。

十、監視 WebLogic 域
監視 WebLogic 域的健康狀況和效能的工具是管理控制檯。通過控制檯,你可以觀察到 WebLogic 資源的狀態和統計資訊,如伺服器, HTTP , JTA 子系統, JNDI, 安全, CORBA 連線池, EJB , JDBC 以及 JMS 。
舉個例子,在 Server ―― >Monitoring ―― >Performance 為當前伺服器例項提供了與等待和執行狀態的請求有關的效能參考。它包括下列資訊:
n          佇列中空閒執行緒數。
n          佇列中等待時間最長的請求。
n          吞吐量,根據已經處理的請求數來衡量的。
n          佇列長度,根據佇列中等待請求數來衡量的。
n          JVM 堆還有的記憶體量。


六、優化連線快取
Config.xml 檔案中的元素接受快取數( AcceptBacklog )屬性是用來設定請求 WebLogic 例項的連線數,在拒絕額外的請求之前,能接受設定的快取數。 AcceptBacklog 屬性指定有多少 TCP 連線快取在等待佇列,這個固定的佇列存放了 TCP 堆疊已經收到但應用程式還沒有收到的連線請求。預設值是 50 ,最大值由作業系統決定。
在控制檯調整接受快取數的步驟:
1.     啟動 WebLogic ,訪問控制檯。
2.     展開左邊皮膚 Servers 節點。
3.     點選你要配置的伺服器例項的名稱。
4.     選擇配置( Configuration )―― > 調整( Tuning )標籤。
5.     根據需要修改預設的接受快取數( Accept Backlog ):
n          在執行期間,如果許多客戶端連線得不到響應或被拒絕,並且伺服器端也沒有錯誤訊息,說明接受快取的值可能太小。
n          在你訪問 WebLogic 時,如果收到“拒絕連線( connection refused )”的提示,則應該增加接受快取的預設值的 25 %。繼續增加其值的 25 %,直到停止出現這樣的提示。
6.     點選應用( Apply ),儲存設定。

七、如何提高 JDBC 連線池的效能
建立一個帶 DBMS 的 JDBC 連線是非常慢的。如果應用程式需要資料庫不斷的連線和斷開,這種建立方式會造成一個重大的效能問題。 WebLogic 連線池提供了一種高效的解決方案來解決這個問題。
當啟動 WebLogic ,就開啟連線池,以便於所有客戶連線。當一個客戶關閉一個連線,這個連線就返回到連線池,供其他的客戶使用。連線本身不會關閉。如此就用極少的代價實現了連線和斷開連線池。
在連線池裡應該建立多少連線呢?連線池會根據配置引數中的最大數與最小數之間增加或減少連線。最好的效能應該是連線數與當前客戶會話( Session )數相同。
7 . 1 調整 JDBC 連線池的初始容量
在配置連線池時, JDBCConnectionPool 元素中的 InitialCapacity 屬效能設定連線數,建立物理的資料庫連線。如果伺服器不能建立這個連線數,連線池的建立就會失敗。
在開發期間,為了使伺服器啟動更快,可以很方便的設定 InitialCapacity 屬性的值小一點。在產品系統中,就應該把 InitialCapacity 的值設為與 MaxCapacity 值相同,預設產品模式的值為 25 。這樣,在伺服器啟動時,所有的連線就會被建立。如果你調整了 MaxCapacity 值後,一定要確信 InitialCapacity 值設定與 MaxCapacity 值相同。
如果 InitialCapacity 比 MaxCapacity 值少,當負荷增加時,伺服器需要建立額外的資料庫連線。當伺服器處於低負荷時,所有的資源應該是儘快的完成請求,而不是建立新的資料庫連線。
7 . 2 調整 JDBC 連線池的最大容量
JDBCConnectonPool 元素中的 MaxCapacity 屬性設定連線池包含的最大的物理資料庫連線數。不同的 JDBC 驅動程式和資料庫伺服器可能限制物理連線數。
預設的最大容量數與預設的執行緒數相等:開發模式為 15 ,產品模式為 25 。不過,在產品模式下,建議連線數與當前的客戶會話( Session )數相等。在伺服器端,連線池的容量與執行執行緒數是無關的,正在進行的使用者會話比執行執行緒更多。 [/quote]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7656893/viewspace-678534/,如需轉載,請註明出處,否則將追究法律責任。

相關文章