weblogic?Server內部結構圖:

(一)??原理簡單說明
服務器啟動,就會綁定到相應的端口,并為一個端口分配一個線程以接受連接請求,一旦服務器接受到連接請求并建立好連接以后,監聽線程將處理權交給套接字復用器,套接字復用器進行一定的處理,并會負責選擇利用那個執行隊列并將請求置入其中。當有一個請求進入執行隊列,就會有一個空閑的執行縣城從該隊列里面取走并向調用者返回結果。
(二)??執行隊列和執行線程的相關配置
執行線程數量有一定的限制,在服務器啟動的時候,就已經形成了一個含有一定數量執行線程的池,執行線程可能跨servlet,ejb和jdbc等,由于執行線程僅當程序成功結束或者出現異常才能被釋放繼續處理其他請求,所以如果執行線程執行的不夠快,而請求又多的情況下,就會造成執行隊列的阻塞。
相關的配置信息有:
server菜單—〉configuration頁---〉高級配置---〉Config?Execute?Queues中的配置項如下:
1、Queue?Length隊列長度,執行隊列的長度
2、Queue?Length?Threshold?Percent?一個百分數,當request的數量達到隊列長度的這個比例的時候,weblogic會發出overflow的標志信息。
3、Thread?Count?服務器初始創建的執行線程的數量
4、Thread?Increase?如果weblogic發出overflow的標志信息,weblogic會嘗試增加這個數量的執行線程,以解決處理矛盾。
5、Threads?Maximum最大執行線程數
6、Threads?Minimum最小執行線程數
7、Thread?Priority線程優先級
另外server菜單—〉configuration頁---〉tuning子頁中還有一些相關的配置:
1、??Stuck?Thread?Max?Time?黏聯線程時間,超過這個時間沒有返回的執行線程,系統將認為是黏聯線程。
2、??Stuck?Thread?Timer?Interval?系統檢查黏聯線程的時間間隔
如果weblogic認為某個隊列中的所有的線程全部黏聯的話,weblogic將會增加執行線程的數量。
注意:執行線程的數量一旦增加,目前weblogic不會去減少他,如果增加了一些線程以后再次出現overflow的警告,weblogic會繼續增加執行線程的數量,一直到達到上限為止。
(三)??套接字復用器的相關配置
Weblogic帶有兩個版本的套接字復用器,純java版和本地接口版(jni),一般來說在訪問量小的情況下,java版比jni版性能要好一些,因為jni的API調用會損失一部分性能,但是訪問量大的情況,一般都是jni版的性能比較好,所以盡量保證weblogic實用本地接口版的套接字復用器。
相關的配置參數有兩個,在server菜單—〉configuration頁---〉tuning子頁中的第一個和第二個配置項。
Enable?Native?IO?:啟用本地IO,勾選這個配置以后,weblogic就會啟用本地接口版的套接字復用器
Socket?Readers?:如果不選上一個選項,則這個選項可用,也就是說java版的套接字復用器會被啟用,并且,java版的復用器會從執行線程中抽出這個比例的線程用于處理socket的請求。(和java客戶端訪問有關?)
web應用程序的相關配置1、單線程模式servlet
默認情況下,一個servlet實例將會產生多個線程來同時響應多個請求。
如果某個servlet實現SingleThreadMod旗標接口,那么這個servlet將會自動拒絕多路并行請求的模式。在這種情況下,weblogic會產生一個servlet實例池來滿足單線程的要求。
目前,應該盡量避免使用單線程模式的servlet,如果需要在大容量的系統中使用單線程模式的servlet,那么應該調整如下的參數:
Single?Threaded?Servlet?Pool?Size?這個參數可在weblogic.xml或者在weblogic控制臺上webapplication菜單---〉configuration頁---〉Descriptor??子頁中進行設置。
默認為5。
2、Weblogic生產模式下會自動監測servlet和jsp的更改情況,在產品模式下,不需要這些檢查,可以通過下面的參數更改:
JSPPage?Check?Secs和Servlet?Reload?Check?Secs均設為-1這兩項是weblogic檢查jsp和servlet的時間間隔。設置為-1,weblogic將不再檢查。
關閉JSPKeep?Generated和JSPVerbose,產品模式下也不需要這兩個選項。
Enable?JSP?Line?Numbers?這個選項是啟用jsp行號的選項,啟用行號的目的是用來支持調試,有些IDE可以在jsp生成的java源代碼中設置斷點用于調試。生產模式中也不需要。
注意:在產品發布模式下,請禁止對servlet和jsp的變更檢查,這樣除了能提高效率以外,還可以防止用上傳文件的方式對服務器的攻擊。如果需要更改servlet和jsp,可以重新部署應用。
3、Session和cookie的相關配置
概念會話cookie:如果不設置過期時間,則表示這個cookie的生命期為瀏覽器會話期間,只要關閉瀏覽器窗口,cookie就消失了。這種生命期為瀏覽器會話期的?cookie被稱為會話cookie。
Session?Cookie?Max?Age?Secs?就是會話cookie的超時時間,設置小于0表示不限制。
Session?Invalidation?Interval?Secs?檢查過期session的周期
Session?Timeout?Secs?session的超時時間
4、Jdbc連接池的配置
URL?連接池地址
Driver?Classname?:jdbc驅動類名
Properties?:屬性,例如user=examples
Password?:密碼
Initial?Capacity?:初始連接數
Maximum?Capacity?:最大連接數
Capacity?Increment?:連接池每次增加連接的數量
?
Statement?Cache?Type?:prepared?statements緩存的策略,LRU算法在有新的語句到來時,將最不經常被用得語句調整出緩存。FIXED算法為先進先出的算法
Statement?Cache?Size?:緩存中語句的最大數量,調整這個數值的大小,有利于提高系統的效率。?
java虛擬機配置JRockit是BEA公司開發的Intel平臺之上的高性能以及高可管理性的jvm產品,在Intel平臺上使用JRockit無疑會大大的提高效率。使用向導建立server的配置的時候,可以選擇JRockit作為該server的虛擬機,另外,也可以在域的startWebLogic.cmd或者startWebLogic.sh腳本中配置使用JRockit。
?
使用JRockit:
set?JAVA_VENDOR=BEA
set?JAVA_HOME=c:\bea\jrockit81sp4_142_05
使用Sun的jvm:
set?JAVA_VENDOR=Sun
set?JAVA_HOME=c:\bea\jdk142_05
?
u???????與java虛擬機相關的參數配置可在startWebLogic.cmd或者startWebLogic.sh腳本中設置,在其執行java命令之前一行加入如下指令:
set?JAVA_VM=%JAVA_VM%?“這里加入虛擬機參數”
JRockit上的一些參數解釋如下:
選項
????
描述
-X
????
顯示擴展Java選項
-Xallotype
-Xallocationtype
????
可取值global和local,定義使用本地線程還是全局線程。
global,在最大堆尺寸比較小時(小于128M)或者應用程序大量使用了線程時使用。
local,在最大堆尺寸比較大時(大于128M)或者應用程序少量使用了線程時使用。
每個本地線程區都要消耗大約2K的內存,如果大量地使用了線程,本地線程不但會造成內存空間浪費,而且還會造成堆碎片。使用全局線程機制會減少堆碎片,但在內存分配方面速度要慢一些。
-Xbootclasspath
????
指定類搜索路徑,可以是ZIP和JAR文件,以;或:分隔
-Xcleartype
????
定義內存清理時機,可取值gc,?local,?alloc。gc表示在垃圾回收時清理內存;local表示時分配一塊local線程區時清理;alloc表示內存區要被分配給其它對象時清理
-Xgc
????
選擇要使用的垃圾回收器的類型,可取值:
gencopy:分代復制收集(默認)適合調試期間使用
singlecon:單空間并發,無中斷并發
gencon:世代并發,暫停時間最短
parallel:parallel并行回收器,會導致應用程序間歇暫停,但會帶來最大吞吐量。
如果-Xmx小于128M,缺省使用gencopy,否則使用gencon
-Xgcpause
????
打印由垃圾回收器造成的停頓時間
-Xgcreport
????
打印垃圾回收報表
-Xjvmpi
????
是否允許JVMPI事件,這些事件有:
entryexit(缺省ON)
allocs(缺省ON)
monitors(缺省ON)
arenasdelete(缺省OFF)
例如:-Xjvmpi:allocs=off,monitors=off,entryexit=off
-Xmanagement
????
激活JVM中的管理服務器,在JVM的管理控制臺能連接到它之前,必須先激活。
-Xms
????
設置初始堆大小,單位有K、M、G
-Xmx
????
設置最大堆大小,單位有K、M、G
建議:應設置-Xms=-Xmx以免去分配堆的時間
-Xnativethreads
????
使用本地線程系統,這是缺省選項
-Xnoclassgc
????
禁止對類作垃圾回收
-Xnohup
????
告訴JRockit,忽略CTRL_LOGOFF_EVENT和SIGHUP事件
-Xns
????
設置nursery尺寸,單位有K、M、G
Nursery是垃圾回收器用來存放臨時對象的地方,應該在保證垃圾回收暫停時間最短的情況下,盡量大的調整nursery的值。
對于-Xgc:gencopy,缺省的Nursery大小為320KB/CPU,對于10個CPU的系統來說,Nursery大小為3200KB(3.2M)對于-Xgc:gencon,缺省的Nursery大小為10M/CPU,對于10個CPU的系統來說,Nursery大小為100M
-Xss
????
設置線程棧尺寸,單位有K、M、G
-Xthinthreads
????
使用JRockit的高性能線程系統,在IA64上不可用。
注意:瘦線程系統目前還沒有全面推廣,不建議使用
-Xverbose
????
讓JRockit打印更多的信息,可選的參數有:
codegen、cpuinfo、gc、load、memory、Opt
-Xverify
????
作完整的bytecode一級的校驗
?
u???????JRockit的管理控制臺的使用
在JRockit的啟動參數中加入-Xmanagement,以便啟動JRockit的時候同時啟動其Management?Server。
在JRockit的bin目錄下,運行console.exe程序
建立一個新的連接,連接需要監視的JRockit(監視端口默認為7090)
在JRockit?Management?Console中,將Tools/Preferences菜單中的Mode?of?operation屬性設為developer
在Method?Profiler屬性頁中添加你所需要觀察的類的成員方法
按Start按鈕讓Method?Profiler開始進行統計
原文地址:
http://www.tkk7.com/lqsun