詳解Oracle WebLogic服務器服務框架
為了完全理解WebLogic服務器如何工作,并讓它表現出***性能,我們很有必要理解幾個概念。最重要的概念都在下面的內容中談到了。
執行線程和隊列
本部分內容簡單描述了Oracle WebLogic服務器的內部架構,大家可以了解到該服務器如何執行工作來滿足用戶請求的。當客戶端向WebLogic發起請求時,響應該請求的實際工作是由叫做執行線程的Java線程執行的。用戶可以使用指向Servlet引擎的基于HTTP的請求,或者訪問諸如企業級JavaBean(EJB)這類對象的遠程方法調用(RMI)來提交工作。當服務器進程啟動時,它會把自己綁定到一個端口,并給該端口分配一個針對傳入請求的監聽線程。一旦該請求建立了連接,服務器就把該連接的控制傳遞給socket muxer。Socket muxer從socket讀取請求,并在請求到達時把工作請求放到自調整的執行隊列中。一個空閑的執行線程將從執行隊列取出請求,再把這些請求的響應工作轉發給專門的處理線程。執行線程執行請求并返回響應。
Oracle WebLogic服務器使用socket muxer(軟件模塊)讀取服務器上的傳入請求。Muxer從網絡上讀取消息,并把它們打成工作包,然后放入工作管理器隊列,通過某個線程執行工作并確保響應回到請求來源的同一個socket去。有兩種類型的muxer,一種是Java Muxer,另一種是本地muxer。Java muxer使用專門平臺的本地二進制包。默認情況下,Oracle WebLogic使用本地muxer——也就是說,該服務器的“啟用本地IOP”參數是選中狀態。要注意的是,若使用本地muxer,該服務器會創建固定數量的線程來讀取傳入請求;而使用Java muxer,你可以在管理控制臺中修改“Socket讀取器百分比”參數來配置線程數量。本地muxer分配特定比例的服務器線程來用作socket讀取器線程,形成線程池功能,同時剩下的服務器線程忙著處理客戶端請求。一般情況下,你需要小心修改socket讀取器線程的數量。在許多情況下,***化的配置是設置為“1”。
如果你想知道使用的是本地muxer還是Java muxer,看看消息涉及的執行線程就知道了。如果你用的是本地muxer,服務器錯誤信息會提示“weblogic.socket.EPollSocketMuxer”;而如果你使用的是Java muxer,你看到的就會是“weblogic.socket.SocketMuxer”。要注意的是,“EPollSockerMuxer”只與運行于Linux服務器上的JRockit JVM有關。如果配置為本地muxer,你還可以看到“poll”字樣,因為它使用了輪詢機制來查詢socket數據。本地muxer被認為能提供更優越的性能,尤其是在擴展為大用戶群的情況下,因為它們使用了無阻塞線程模型。在管理WebLogic服務器實例時,你會經常遇到“阻塞線程”的情況,這種情況一般發生在某個線程不能在設定時間內(默認是十分鐘)返回線程池的時候發生。
執行JMX API和MBeans
WebLogic服務器是用Sum的Java管理擴展實現的部署系統管理基礎架構。執行JMX API涉及到使用Java MBeans(受管bean)給系統管理任務建模。如果你理解MBean和JMX API,你可以使用它們創建你自己定制的管理工具。然而,所有的管理工具(比如,管理控制臺)都使用相同的MBean和JMX API,所以你不必重新發明輪子來創建定制管理工具。雖然WebLogic服務器管理員不需要知道如何用JMX API編程,但是如果對其編程有所了解的話,有助于理解不同類型的MBean以及理解JMX API如何與它們交互。
WebLogic服務器使用兩種基本類型的MBean——配置MBean和運行時MBean——來配置、監視和管理服務器以及其資源。
•配置MBean包含服務器和資源的配置信息,存儲在域配置文件中,比如“config.xml”文件或者其它XML文件。這些都是持久的MBean,而域配置文件(config.xml)為這些MBean存儲屬性值。不管什么時候你用管理工具(比如管理服務器)修改了配置屬性,這些變更都會持久化到“config.xml”文件中。通過修改啟動腳本,在Java啟動命令中添加額外參數“-D”選項,也可以修改配置值。如果你修改了任何配置設置,“config.xml”文件都會自動更新。當受管服務器啟動時,它會聯系管理服務器,獲得配置信息副本,在內存中存儲為配置MBean。因此,域中的所有服務器在內存中都有相同的配置副本。要注意,在啟動受管服務器時,你修改的任何屬性都不會影響“config.xml”文件;只有在管理服務器上修改的屬性值,才會保存到“config.xml”文件中。當你關閉服務器實例時,該服務器托管的所有配置MBean都會被銷毀。
•運行時MBean幫助監視運行服務器實例,它包含保持服務器實例和應用程序運行時信息的屬性。每個服務器的資源都會更新相關運行時MBean,包括其狀態變化。例如,“ServerRuntimeMBean ”在服務器啟動時會初始化,其中包括了該服務器的運行時數據。運行時MBean只由運行時數據構成,沒有其它內容。當你關閉服務器時,“ServerRuntimeMBean ”中的運行時統計都被銷毀了,其它所有運行時MBean的情況也類似。
MBean服務器充當著各種MBean容器的角色,該服務器創建并提供對MBean的訪問。Oracle提供三種類型的MBean服務器。管理服務器托管域運行時MBean服務器實例,它為域范圍內的服務管理MBean。受管服務器和管理服務器都托管運行時MBean服務器,它支持你配置服務器實例。管理服務器還托管編輯MBean服務器,它管理掛起的配置變更。管理服務器和受管服務器還可以選擇性地托管JVM的平臺MBean服務器,它控制包含JDK監視信息的MBean。
你可以在服務器實例運行時動態修改大部分域配置屬性。對于不支持動態配置的屬性,你就必須重啟服務器實例了。你配置的運行時屬性值將立即反映出你所作的變更,這些值會持久地保存在“config.xml”文件中。
【編輯推薦】