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