引自:
http://www.zebcn.com/html/200603/474.html創建 WebLogic 配置/域
域是一組邏輯上相關的WebLogic Server資源,您可以把它當作單個管理單元進行管理。域將所有的資源和應用程序信息保存在一個基于XML的配置庫中。為了在WebLogic Server上部署并運行應用程序,首先要創建域。
?
推薦使用域配置向導作為創建新域的工具。如果您準備編寫腳本來創建域,推薦使用slient模式的域配置向導這個工具。也可以從所提供的“開箱即用”的域模板或定制的域模板來創建WebLogic Server域。
?
為了創建定制的域模板,請使用配置模板生成器,它是一個單機的Java應用程序,能夠讓您創建定制的配置和擴展。您可以使用這些配置和擴展來創建和更新域。
域配置向導具有以下屬性:
·?? 向導會引導您完成針對目標環境創建或擴展域的過程。
·?? 向導可以使用OOB預定義的域模板或定制域模板創建或擴展域。
·?? 向導將創建config.xml 文件,建立基本的安全性,構造啟動腳本,等等。
·?? 可以使用graphical、console 或 silent模式啟動向導。
要以graphical模式啟動向導,請運行以下命令之一:

域配置模板生成器具有以下屬性:?
·?? 向導會引導您完成創建或擴展配置模板 (JAR file) 的過程。
·?? 配置向導可以使用已創建的配置(域)模板來創建域。
只能以graphical模式啟動配置模板生成器。
要啟動配置模板生成器,請運行以下命令之一:

技巧
·?? 如果 WebLogic Domain/Configuration 分布在多臺物理機器上,那么應該只能在管理服務器硬件(機器)上運行域配置向導。
·?? 并不要求一定在托管服務器硬件上運行域配置向導。?
·?? 在WebLogic Server 安裝目錄之外創建WebLogic域 (默認情況下,所創建的域位于%BEA_HOME%Ser_projectsdomains ) 。
·?? 為管理服務器創建啟動腳本時,如果腳本(startWebLogic.cmd/sh)沒有調用域目錄中的weblogic.Server 類,使用這個命令行選項來指定域的位置:-Dweblogic.RootDirectory=path。
·?? 啟動托管服務器(startManagedWebLogic.cmd/sh)時,如果進行設置的話, -Dweblogic.RootDirectory 將被設置為服務器根目錄,該目錄將被用于存儲文件,比如日志文件和托管服務器獨立(managed-server independence ,MSI)文件。
服務器啟動
?
管理服務器從配置庫(config.xml)加載所有配置。所有相關的托管服務器必須在啟動期間連接到運行中的管理服務器。獨立的托管服務器可以從本地庫(msi-config.xml)加載配置。
?
如果WebLogic運行在裝有Unix操作系統的計算機上,您可以為WebLogic Server進程分配一個UID或GID,以便在計算機執行所有優先的啟動操作之后,以root用戶的身份進行綁定。如果WebLogic Server用戶想要綁定到更高的端口(>1024),則無需root權限。
技巧
編寫使服務器啟動自動化的腳本時,考慮以下因素:
·?? 在域中,必須在任何相關托管服務器之前啟動管理服務器。
·?? 當把托管服務器作為相關服務器啟動時,它連接到管理服務器,以便下載配置。
·?? 當把托管服務器作為獨立服務器啟動時,檢查msi-config.xml 文件是否被存儲在服務器根目錄中。
·?? 在Unix中,使用'nohup' 運行 WebLogic Server啟動腳本,以保證即使您注銷以后,服務器依然在后臺運行。
·?? 在OS中,為安裝和啟動服務器創建一個WebLogic Server用戶。
·?? 存儲加密后的用戶身份,使用boot.properties文件來避免啟動腳本中出現硬編碼的用戶身份。
·?? 當把服務器綁定到較低端口(<1024)時(這需要root權限),使用 WebLogic UNIX機器配置來綁定UID 或 GID 。
·?? 為了使WebLogic域中的管理服務器在機器重啟期間能夠自動重啟,使用操作系統提供的daemon進程功能。
o?????????????? Windows 服務
o?????????????? UNIX daemon 進程
·?? 當您使用域配置向導創建域時,域中的管理服務器可以被當成服務。
·?? 此外,可以使用位于域文件夾中的installservice.cmd和 uninstallservice.cmd 腳本在Windows Service Control Manager (SCM)中添加或刪除服務。
·?? 如果管理服務器和托管服務器是同一臺機器,配置管理服務器進程和托管服務器進程之間的OS級服務相關性。
·?? 配置rc腳本,以便在正確的運行級別上添加WebLogic 啟動命令。
啟動和關機類
可以把WebLogic Server配置為在啟動和正常關機過程中調用類。在服務器初始化所有子系統之后和它給客戶端訪問開放端口之前,加載并執行啟動類。類似地,在服務器啟動正常關機進程之前加載關機類。和應用程序文件不同,必須手動地使啟動和關機類在已部署服務器地本地classpath中可用。
技巧
·?? 在啟動期間,使服務器級的啟動類在已部署WebLogic Server實例的系統classpath 中可用。
·?? 域中的管理服務器到托管服務器都不能自動部署出現在系統classpath中的類;應用程序級別的類可以分布在域中的管理服務器到目標服務器上。
·?? 重新部署應用程序時,就會重新加載應用程序級別的啟動類。
·?? 不能動態地重新加載服務器級別的啟動類;只能在它們各自的WebLogic Server重新啟動時重新加載它們。
·?? 使用應用程序級別的啟動類,而不要定義服務器級別的啟動類。
節點管理器
使用WebLogic Server提供的節點管理器功能自動啟動托管服務器,或者重新啟動出現故障的托管服務器。節點管理器使管理員可以從管理服務器或命令行(weblogic.Admin START…)遠程啟動托管服務器。這可以通過與管理服務器通信來實現,而不用依賴OS特定的遠程登錄功能。
?
此外,除了啟動和關閉托管服務器之外,節點管理器還能夠監控它所啟動的服務器的健康狀況。如果進行恰當的配置,在出現故障時,節點管理器能夠自動重新啟動托管服務器。
技巧
·?? 使用節點管理器時,顯式地配置所托管服務器的有遠程啟動屬性,而不要依靠節點管理器為托管服務器的配置提供的環境。
·?? 節點管理器只接收來自管理服務器的請求。管理服務器不可用時,想要通過節點管理器遠程地重新啟動托管服務器是不可能的。
·?? 把節點管理器配置為一個服務/ daemon。
·?? 啟用托管服務器的自動重啟。
·?? 配置機器在出現故障時自動關閉,以便在節點管理器嘗試重新啟動一個出現故障的實例之前關閉它。
·?? 運行在一臺機器上的節點管理器可以被運行在該機器上的多臺托管服務器所共享。
·?? 節點管理器還可以被運行在同一臺機器上的多個域中的托管服務器所共享。
WebLogic Server 關閉過程
異常的JVM終止可以導致套接字或程序段這樣的資源被鎖定。在操作系統中關閉或終止WebLogic Server進程被認為是異常終止。
可以通過以下方式正常關閉WebLogic Server:
·?? 使用管理控制臺'Graceful Shutdown" 超鏈接。
·?? 使用 weblogic.Admin SHUTDOWN… 命令。
·?? 使用JMX,具體是調用 ServerMBean 類的stop方法。
技巧
·?? 為了正常關閉生產服務器,需要使用WebLogic 管理控制臺或者weblogic.Admin 實用程序。
·?? 正常關機不會異常終止用戶會話;它等待HTTP會話完成或超時。
·?? 也可以把WebLogic Server配置為不等待(忽略Session During Shutdown 選項)。
·?? 正常關機超時是可配置的;默認情況下,服務器將會無限期地等待關機過程完成。
·?? 如果服務器沒有響應正常關機請求,或者當服務器等待正在進行的會話時(處于待機狀態)關閉服務器,使用'Force Shutdown' 選項。
·?? 如果被配置為daemon,確保將rc腳本中的stop方法配置為在機器重啟和停止時正常關閉服務器。
·?? 如果對節點管理器進行配置,終止節點管理器將不會停止由它們啟動的相應服務器。必須單獨地停止各臺托管服務器。
備份和恢復
為了在出現故障時遷移或恢復WebLogic域,定期備份管理服務器機器上的整個域目錄樹。這樣,您就可以從硬件或系統故障中恢復,而要做的不過是還原域目錄并重新啟動管理服務器。
?
如果管理服務器崩潰,管理服務器將會把所有正在運行的托管服務器的相關信息保留在running-managed-servers.xml文件中。重新啟動時,管理服務器將會讀取這個文件,并嘗試聯系所有以前運行的托管服務器。如果沒有托管服務器正在運行的話,discovery模式可能會增加管理服務器的啟動時間,但是始終要使用discovery模式(默認情況下它是打開的),這樣才能保證有托管服務器已經運行的情況下,管理服務器重新與所有托管服務器連接。
一些需要引起注意/定期從管理服務器機器上進行備份的重要文件有:
·?? config.xml
域配置庫。
·?? config.xml.booted
成功啟動時對域配置庫的良好備份。
·?? boot.properties
啟動管理服務器時需要的加密后的用戶名和密碼。
·?? running-managed-servers.xml
這是當前正在運行的相關托管服務器的一個列表。這個文件用于當管理服務器重新啟動后,而且有托管服務器正在運行時,發現托管服務器。
·?? domain/configArchive/
包含域配置庫文件的拷貝。使用管理工具進行更新時,管理服務器把舊的config.xml 文件復制到這個目錄。
·?? domaindminserverdapdapfiles
當前被域的管理服務器使用的內嵌LDAP 數據文件。
·?? *.ldift 文件
這些文件可以用于把WebLogic Domain Embedded LDAP 服務器初始化為剛剛創建域時的樣子。
·?? domain/adminserver/ldap/backup/EmbeddedLDAPBackup.zip
WebLogic Domain Embedded LDAP 服務器的備份。內嵌的LDAP被用于存儲用戶、組、角色、默認的安全領域使用的策略、myrealm的安全提供程序。
·?? Batch/Shell 腳本
setEnv.cmd/sh, startWebLogic.cmd/sh, startManagedWebLogic.cmd/sh。
?為管理任務編寫腳本
為了創建用于管理域配置的腳本:
·?? 使用weblogic.Admin實用程序命令BATCHUPDATE,它運行一個批處理文件中指定的一系列命令。這個命令使用一個JVM運行所有列出的命令。
·?? -Dweblogic.system.BootIdentityFile選項讓您可以避免把用戶名和密碼硬編碼在您的文本腳本中。
·?? 為了在操作系統腳本中構建邏輯分支,使用下面的命令求出weblogic.Admin命令的返回代碼:
o?????????????? %ERRORLEVEL% (Windows)
o?????????????? 0 (bash shell)
·?? ?weblogic.Admin 的-adminurl 選項從管理服務器檢索托管服務器的配置Mbean和運行時Mbean。
·?? 不推薦直接修改config.xml文件。
·?? 如果您必須修改config.xml文件:
o?????????????? 首先,在編輯之前備份原始文件。
o?????????????? 使用XML 編輯器,以避免錄入錯誤。
o?????????????? 當管理服務器正在運行時,要避免編輯該文件。
·?? 使用wlconfig Ant任務來為配置信息編寫腳本,并把它集成到整個構建過程中。
·?? 當管理服務器正在運行并且處于離線狀態時,使用 WebLogic Scripting Tool (WLST)來修改域配置。 (dev2dev.bea.com)
·?? WLST提供一個功能強大的到WebLogic Server的shell接口,而且它使用Jython 作為腳本語言。
·?? 您還可以使用第三方的解決方案來管理配置,比如WLShell使用程序。 (www.wlshell.com)
·?? WLShell提供一個功能強大的、Unix風格的到WebLogic Server的shell接口;它針對WebLogic Server MBean使用文件系統模擬。
日志記錄
日志記錄了和事件(比如服務器的啟動和關閉)、新應用程序的部署或者一個或多個子系統故障有關的信息。日志消息包括和事件的時間與日期,以及啟動事件用戶的ID有關的信息。每個WebLogic Server實例都可以維護一份服務器日志、一份HTTP訪問日志、一份JDBC日志和一份JTA事務日志。
技巧
·?? 為了防止當日志文件所占空間過大時,出現相應的服務器重啟的情況,需要啟用日志旋轉(log rotation)。
·?? 考慮按照大小旋轉日志,而不是按照生成的時間旋轉,因為使用生成時間這個選項會使文件增長非常迅速。
·?? 如果您沒有進行交互式調試,而且WebLogic Server 是在后臺(Windows 或 Unix)啟動的,使用以下命令把stdout和stderr重定向到一個文件:
o?????????????? -Dweblogic.Stdout="stdout-filename"
o?????????????? -Dweblogic.Stderr="stderr-filename"
·?? 在生產中,如果您不啟用WebLogic Server創建JDBC日志,您就可以避免服務器上的額外文件I/O。
·?? 使用節點管理器啟動托管服務器時,節點管理器捕捉服務器的stdout并把它存儲到一個文件中。可以使用管理控制臺來查看該文件的內容。
·?? 經常檢查WebLogic Server 的日志文件,以熟悉常規操作,這樣您就能夠很容易地辨認出異常的日志項。
JDBC
在WebLogic Server中,使用池緩沖到數據庫的JDBC連接可以提高應用程序的性能。連接池根除了為每個應用程序創建新的數據庫連接的需要。JDBC連接池提供到您數據庫的現成連接。
?
使用連接池時,到數據庫的連接的數目可以動態改變。但是,在負載高峰時期試圖增加JDBC連接的數目將會使情況惡化,因為創建數據庫連接是一項開銷昂貴的操作。
?
連接池還可以通過緩存用于重用的prepared statement和callable statement來提高性能。重用prepared statement和callable statement可以降低數據庫服務器上的CPU利用率。
?
通過把其他應用程序分離到單獨的機器或硬件上,可以避免耗盡WebLogic Server機器上的處理能力;為數據庫指派一臺專用的機器。
技巧
·?? 如果有可能,按大小排列數據庫連接池,這樣它們就永遠不會增加連接的數目;設置初始容量為最大容量。
·?? 設置連接池的最大容量至少等于執行線程的數量。
·?? 配置 Inactive Connection Timeout,以指定一個連接在被回收到池中之前,保持非活動狀態的時間長短。
·?? Connection Leak Profiling選項顯示了連接池中泄漏的連接。BEA建議您不要在生產中使用這個選項;它要使用額外的資源,并且通常會降低連接池操作的速度。
·?? 如果您能夠負擔把測試連接作為常規請求處理一部分所帶來的開銷,您可以只使用Test Reserved Connections 選項。
·?? 避免對“Test Table Name”使用生產表,而要使用啞表(例如Dual)。
·?? 使用語句緩存提高prepared 和 callable statement的性能。
·?? 為緩存選擇 least-recently-used (LRU) 算法;這將從緩存中刪除很少使用的語句。
·?? 當創建連接池或者啟動WebLogic Server時,如果數據庫不可訪問,可以使用Connection Creation Retry Frequency 重新嘗試建立到數據庫的連接。
·?? 當WebLogic Server 正在運行時,如果重新啟動數據庫, Test Frequency可以從0開始增加,這樣所有連接都會被關閉,然后被重新打開,以重新建立有效的物理連接。在重新創建所有連接之后,將它改回0將禁止測試。
·?? 當為連接池使用DataSource對象時,使用 Honors Global Transaction選項來創建TxDataSource。
·?? 您應該使用non-Tx DataSource的惟一場合就是當您想在數據庫上完成一些工作,而又不想把該數據庫包括到當前事務中時。
·?? 當配置一個連接池,以便與WebLogic JMS JDBC Store 一起使用時,使用non-XA 數據庫驅動程序。
JMS
WebLogic Server JMS體系結構允許在一個WebLogic域中創建多臺JMS服務器。但是每臺JMS服務器只能在一臺WebLogic Server上被實例化(目標化),因為它是一項“僅一次”的服務。一臺JMS服務器可以作為多個目的地的宿主。永久性存儲(基于磁盤的文件或可通過JDBC訪問的數據庫)可以被配置用于存儲永久性的消息數據。
?
如果必須跨多個目的地共享一個JMS存儲器,將多個目的地配置為駐留在一臺JMS服務器上。但是,為了使用對每個目的地使用單獨的永久性存儲器,在多臺JMS服務器下創建它們。
技巧
·?? 針對JMS文件存儲啟用直接寫入同步寫入策略,這可以釋放虛擬內存(VM)堆,但是只有當存在一些并發的活動JMS客戶端時,直接寫入可以顯著地提高性能。
·?? 在單獨的磁盤上,或者甚至是在單獨的磁盤控制器上分離文件存儲。
·?? 為了使文件存儲高度可用,您可以使用Storage Area Network (SAN),一種多端口的磁盤或者磁盤鏡像技術。
·?? 不要把使用XA JDBC 驅動程序的連接池與JMS JDBC存儲器關聯起來,因為JMS JDBC存儲器不支持XA 資源驅動程序(WebLogic JMS實現了它自己的XA資源)。
·?? 使用Using Expiration Scan Interval掃描目的地的到期消息可以釋放VM,但是太頻繁的掃描會增加掃描開銷;確保您對此做最優調整。
·?? 在連接工廠上設置 MessagesMaximum ,以便調整異步消息管道的大小。
·?? 為了避免消息增長,在連接工廠級別上設置 Time To Live 屬性。
·?? 禁用默認的JMS連接工廠;針對生產配置特定于應用程序的JMS連接工廠。
·?? 為跨物理目的地(在不同的JMS服務器中進行配置)的負載平衡JMS消息配置一個分布式的目的地。
·?? 當部署分布式目的地時,針對群集中的每臺JMS服務器和成員目的地使用類似的設置。
消息分頁
永久性和非永久性消息消耗服務器內存,除非啟用分頁。消息分頁是釋放永久性和非永久性消息所占用的服務器內存的過程,因為永久性消息也會把它們的數據緩存在內存中。一條被換出頁面的消息不會釋放它使用的所有內存。消息頭和消息屬性仍然留在內存中,以供查找、排序和過濾之用。在事務性會話中發送的消息只有在會話被提交后才適合于分頁。在這之前,消息被保存在內存中。
技巧
·?? 如果啟用JMS分頁,而且沒有配置分頁存儲器, WLS 8.1會自動創建一個分頁存儲器,但是推薦顯式地配置頁面存儲器(您可以指定存儲器的位置)。
·?? JMS分頁增加了一個WebLogic Server實例能夠包含的消息數據的數量,而不要求增加JVM堆大小。
·?? 分頁的確會降低性能,但是對非永久性消息進行分頁時,其效果比對永久性消息分頁時要小。
·?? 始終為WebLogic JMS Server配置限額;限額可以防止消息溢出服務器內存。
流控制
定義JMS服務器之后,您可以配置一個或多個連接工廠,以使用預定義的屬性創建連接。借助流控制功能,您可以在消息生產程序確定自己將會變得過載時,引導JMS服務器或目的地降低它的速度。
技巧
·?? 為了降低過于活躍的、從WebLogic Server 進程之外淹沒目的地的生產程序的速度,需要配置流控制。
·?? 在服務器內部使用流控制會導致服務器線程速度變慢;要小心使用。
部署
WebLogic Server允許您把部署單元存儲為單個存檔文件,或者是一個包含與上述存檔文件相同內容的已展開目錄。存檔文件是包含一個所有應用程序或模塊的類、靜態文件、目錄和部署描述符文件的單個文件。
?
在托管服務器實例上部署用戶應用程序。這將管理應用程序(控制臺)和域配置從用戶應用程序分離出來。在生產環境和多服務器環境中,避免使用應用程序的自動部署。以“生產模式”運行WebLogic域將禁止在生產中進行自動部署。如果您創建腳本來把應用程序部署為整個結構的一部分,考慮使用wldeploy Ant任務。
如果您在部署應用程序(或模塊)時,在把On Future Redeploys選項設置為Initialize Roles and Policies From DD 之前,一次或多次將其設置為Ignore Roles and Policies From DD,您就可以使用管理控制臺設置安全策略和安全角色。但是,使用管理控制臺進行的這些修改將覆蓋部署描述符中指定的安全性。
技巧
·?? 使用生產模式運行生產應用程序。
·?? 避免在管理服務器實例上部署用戶應用程序。
·?? 為了指定服務器的默認Web應用程序,在weblogic.xml或application.xml文件中使用一個空的context-root元素或者一個值為"/" 的元素。
·?? 在管理控制臺中部署應用程序之后,對該應用程序的安全策略的修改將會覆蓋部署描述符中的策略。
重新部署
部署一個應用程序之后,您可以重新部署該應用程序本身或者它的一部分。重新部署一個完整的應用程序包括卸載它所有的類,然后使用修改后的文件再次部署該應用程序。在生產中重新部署應用程序是一個很嚴肅的任務,它可能影響到性能,所以要仔細規劃應用程序的更新。
?
如果生產中有一個Web應用程序正在使用中,重新部署將導致WebLogic Server丟失所有活動的HTTP會話。通過在WebLoigc特定的部署描述符文件(weblogic.xml)中打開一個特殊的屬性,可以還原HTTP會話。
技巧
·?? 如果您只修改了靜態文件,那么在不用重新部署整個應用程序的情況下刷新它們是可能的。
·?? 使用命令行選項部分地重新部署已擴展的應用程序(weblogic.Deployer … -redeploy <files>…)。
·?? 想要在不改變應用程序的情況下修改部署參數,需要使用備用的部署描述符。
·?? 為了簡化在重新部署期間,把應用程序存檔文件重新分布到多個WebLogic Server實例上的過程,需要使用分段模式部署。
·?? 如果管理服務器不可用,可以以獨立模式啟動具有全部分段應用程序的托管服務器,并使它的功能完全。
企業應用程序
如果客戶端位于相同的企業級應用程序類中,而且可以在企業應用程序中跨所有存檔應用程序共享庫,WebLogic優化了對EJB的訪問。所以,考慮創建企業存檔文件,而不是獨立部署相關的應用程序。此外還可以使用企業范圍內的設置,而不要使用部署描述符中的多項本地設置。使用WebLogic控制臺在WebLogic Server域中創建JDBC資源,而不要采用weblogic-application.xml技術。
技巧
·?? 在WebLogic Server中,避免把EJB存檔文件和相關Web應用程序部署為單獨的獨立應用程序。
·?? 當Web組件訪問同一個企業應用程序中的EJB組件時,可以提高運行時性能。
·?? 可以把企業部署為一個部署單元。
·?? 不要把特定于應用程序的類或JAR文件放入系統classpath (避免為了重新加載它們而不得不重新啟動服務器)。
·?? 使用WebLogic Server 8.1時,請使用企業應用程序目錄結構中新的APP-INF/lib 和 APP-INF/classes 目錄,這是為了簡化實用程序類和實用程序存檔文件的打包工作。
預編譯
生產和測試部署應該包括經過預編譯的JSP頁面和EJB(使用weblogic.appc,如果是早期的weblogic版本則使用weblogic.jspc /weblogic.ejbc)。在您部署應用程序之前的很長一段時間內,它們可以捕捉該應用程序的錯誤。此外,離線編譯可以驗證部署描述符與當前規范的兼容性。部署已編譯的應用程序可以縮減部署時間和接下來的服務器重啟時間。用在開發人員的工作站上的開發部署可以使用動態編譯。
技巧
·?? 為了在應用程序部署期間或服務器啟動期間預先編譯JSP文件,在weblogic.jar中啟用預編譯參數。
·?? 在生產環境中,要禁止運行時的頁面檢查和重新編譯,需要把pageCheckSeconds 設定為 -1。
·?? 您可以使用weblogic.appc或weblogic.ejbc (不再使用)在服務器VM之外編譯EJB。這可以減少隨后服務器的重啟時間。
·?? 在腳本中使用weblogic.Deployer實用程序,或者它相關的Ant任務wldeploy,以便在生產環境中使部署自動化。
部署描述符編輯
只有當重新部署應用程序時,修改J2EE應用程序的部署描述符才會生效。WebLogic管理控制臺提供一種方法來修改某些部署描述符屬性,而不用重新部署應用程序。當域以開發模式運行時,為了利用這項功能,您必須在已展開的目錄結構中部署應用程序(非存檔格式)。
?
為了在部署之后修改應用程序的描述符值(以展開的格式),執行以下操作:Web Application Module > Your Application > Configuration 選項卡 > Descriptor選項卡。
技巧
·?? 使用WebLogic Server 提供的工具生成和編輯XML部署描述符。
·?? WebLogic Builder生成描述符;它包括一個用于編輯描述符的接口。
·?? DDInit 是一個命令行實用工具,用于為WebLogic Server應用程序生成部署描述符。
·?? ddcreate 是一個 Ant 任務,可以用于為企業應用程序創建部署描述符。
EJB
無狀態會話EJB自由池可以提高性能和吞吐量,因為bean是在服務器啟動期間或部署期間被創建的。WebLogic Server使用bean實例的緩存來提高有狀態會話EJB的性能。該緩存在內存中存儲活動的EJB實例,這樣它們馬上就可以為客戶端請求所用。
?
使用應用程序級/聯合緩存將導致碎片減少,而且內存和堆空間的利用率更高。但是應用程序級/聯合緩存的使用僅限于企業應用程序中的實體EJB。對于要求高吞吐量的應用程序來說,要使用bean級別的緩存。bean級緩存是高效的,因為任務們不用競爭對聯合緩存中一個控制線程的控制權。
為了在應用程序中使用WebLogic為EJB組件提供的調用優化,把<enable-call-by-reference>設置為true。
?
在同一個企業應用程序中為要訪問的EJB編寫本地接口,也可以達到相同的目的。
?
實體EJB的并發策略包括:
數據庫:
遵從數據庫可以提高吞吐量(對于EJB1.1和2.0來說,這是默認的也是建議使用的機制)。
互斥的:
避免死鎖;只有當在非群集的服務器上要求高度一致性時才使用它。
樂觀的:
在事務期間,EJB容器或數據庫中不會保持鎖定。但是EJB容器確保事務正在更新的數據沒有被修改。
只讀的:
事務結束時,容器不會試著保存bean的狀態;對不會對永久性數據做任何修改的EJB使用這一點。借助只讀策略,使用<read-time-out-seconds>使容器中緩存的bean數據變得無效;當出現超時時,這會更新永久性存儲器中數據。
技巧
·?? 考慮執行線程的數目,以便配置自由池中bean的最大數目。
·?? 要限制有狀態會話EJB使用的內存,需要設置能夠駐留在緩存中的bean的最大數目(max-beans-in-cache)。
·?? 緩存過小會導致頻繁的激活和鈍化。
·?? 緩存過大會導致內存浪費。
·?? 當達到理想的超時時間長短之后,LRU算法會讓bean保持在鈍化狀態。
·?? 為了避免鈍化有狀態會話EJB所帶來的相關開銷,使用Not Recently Used (NRU) 算法。
·?? EJB的本地接口提供對服務器端EJB客戶端的最優訪問。
·?? 聯合緩存使管理員能夠在weblogic-application.xml中只調整一塊緩存,而不是多塊緩存。
·?? 使用容器托管事務的消息驅動bean必須使用XA連接工廠。
安全性
永遠不要對生產服務器使用開發模式;開發模式會放寬域中所有服務器的安全限制。使用兼容性安全性時,禁用生產中的客人登錄,這樣就可以使用客人登錄來訪問WebLogic Server中的WebLogic資源。
?
創建安全策略時,如果通過繼承得到的策略語句出現在Policy Editor頁面的Inherited Policy Statement框中,新的策略會覆蓋它們。想要修改在J2EE部署描述符中定義的安全策略,需要進行重新部署;在管理控制臺中修改內嵌的LDAP策略是動態的。把另外的管理用戶配置為諸如admin、deployer、 monitor 或 operator這樣的角色。
?
SerializedSystemIni.dat包含對域中密碼進行處理以后得到的雜亂信息;確保您在安全的地方存儲了這個文件的拷貝。只能授予WebLogic系統管理員帳號對SerializedSystemIni.dat的讀權限。如果您丟失了管理密碼,而且沒有以boot.properties文件的形式保存啟動身份,那么您不能重新啟動服務器。
技巧
·?? 在boot.properties文件中保存對有權啟動WebLogic Server 的用戶進行加密后的啟動身份。
·?? BEA建議使用安全角色(而不是用戶或組)來保護WebLogic資源;首先把用戶指派給組,然后創建角色語句。
·?? 不要以root權限安裝或運行WebLogic Server 。如果您必須綁定到一個要求授權的端口,請在WebLogic機器配置中使用post-bind UID 或 post-bind GID。
·?? 設置WebLogic安裝和應用程序目錄的所有權,只允許運行服務器的用戶帳戶訪問它們。
恢復管理員密碼
使用默認的身份認證程序時,如果您尚未修改全局的管理角色(默認情況下被授給管理員組),您可以恢復WebLogic域中的管理員密碼。
想要恢復WebLogic域中的管理員密碼,需要完成以下步驟:
·?? 在命令行上,修改到域的目錄,然后運行setEnv 腳本來設置PATH 和CLASSPATH。
·?? 創建一個新的 DefaultAuthenticatorInit.ldift;運行 java weblogic.security.utils.AdminAccount <tempadmin> <temppassword> ./
·?? 刪除<Domain>/<Server>/ldap子目錄中的初始化狀態文件DefaultAuthenticatormyrealmInit.initialized。
·?? 使用新的用戶身份重新啟動服務器。
·?? 要修改舊的管理用戶身份,需要登錄到管理控制臺。(可選)
SSL
當對WebLogic Server使用SSL時,請使用keystore;已經不再使用把身份(私鑰和證書)和信任(CA)保存在文件里這種方法。從早期的版本進行遷移要求您使用私鑰、證書或信任文件創建keystore。
?
如果連接域中WebLogic Server的網絡不可信任,在域中的每臺服務器上啟用SSL,這樣管理服務器和托管服務器之間的LDAP復制就可以使用SSL連接。在域中啟用管理端口要求所有的服務器都使用SSL。
?
默認的WebLogic安裝代表可輸出強度的(exportable-strength) SSL實現(SSL最多可以使用帶有批量加密的512位鑰匙)。長于512位的鑰匙需要BEA提供的內部強度的(domestic-strength)SSL許可證鑰匙。如果您在您的生產環境中使用SSL,請使用高強度的(high-strength)SSL。通常認為長度小于1024位的鑰匙是不可靠的。
?
SSL硬件加速器:在WebLogic Server上運行SSL會在很大程度上耗盡服務器的資源。通過卸載SSL處理,就可以把資源應用到WebLogic功能上。Web服務器、負載平衡器、防火墻或交換機都可以進行SSL處理。
?
在WebLogic Server中,過濾它們可以控制進入的連接。WebLogic Server提高一種默認的連接過濾器實現,您可以在管理控制臺種對它進行配置。
技巧
·?? 在生產中,不要使用與WebLogic一起提供的示例SSL證書。
·?? 為了避免危及應用程序的安全性,安裝并配置特定于服務器的SSL證書,然后在生產服務器上啟用主機名驗證。
·?? 只在必要時對WebLogic Server 使用SSL,因為SSL會降低性能。
·?? 要控制能夠被WebLogic Server 實例接受的連接的類型,請使用連接過濾器。
·?? 使用帶有內置安全套接字層(Secure Socket Layer,SSL)支持的負載平衡器,或者使用Java Cryptography Extension(JCE)在有SSL硬件的機器上運行WebLogic Server。
保護管理控制臺
如果您使用管理服務器(或者在單臺服務器的域中)為應用程序服務,請做到以下幾點,以提供更好的安全性:
·?? 把默認的管理用戶及密碼修改為定制的用戶及密碼。
·?? 修改管理控制臺上下文根路徑。
·?? 啟用域范圍內的管理端口。
·?? 考慮禁用管理控制臺。
如果您使用的是外部LDAP提供程序,把服務器啟動身份存儲在內嵌的LDAP服務器中,然后在外部LDAP身份認證提供程序上設置超時。這樣,如果外部LDAP服務器不可用,您可以繼續重新啟動,向WebLogic Server提供未受保護的數據。此外,在您應用任何修改之前,把所有身份驗證提供程序的控制標志設置為OPTIONAL;這可以防止配置錯誤導致生產服務器不能重新啟動。
?
基于舊式的安全領域API,WebLogic Server提供一個定制的領域,叫做NTRralm,它可以支持本機的Windows域身份認證。對于沒有被設定為使用Active Directory的Windows域來說, NTRealm相當有用。
技巧
·?? 在內嵌的LDAP服務器中存儲服務器啟動身份。
·?? 想要更加出色地控制生產環境,使用Active Directory 身份驗證,而不要使用本機的Windows域(NTRealm)身份驗證。
·?? 為了防止拒絕服務攻擊,在服務器上修改進入協議端口(T3, COM, IIOP, HTTP Post 超時)的超時和最大大小的值。
·?? 讓內部或外部的審核小組執行安全性審核。
群集
WebLogic群集是域中的一組托管服務器,以一種協同的方式為客戶端提供單個服務器視圖。使用WebLogic群集來提高效率、可伸縮性、負載平衡和故障恢復。WebLogic群集是一種流程級別的群集,參與其中的服務器可以位于不同的物理機器上,也可以位于同一臺機器上。IP多播是在群集中交換心跳信號的樞紐。所以,確保在WebLogic Server網絡中啟用多播通信。
技巧
·?? 如果您使用了Web Server代理,那么至少配置兩個,以避免群集的單點故障。
·?? 把WebLogic Server 上的應用程序移植給群集時,確保存儲在HTTP會話中的對象能夠序列化。
·?? 至少在每個群集中防止三個WebLogic Server 實例,這樣一臺服務器的故障就不會停止群集的負載平衡。
·?? 您不能給群集添加管理服務器。
·?? 對網絡中的每個群集使用單獨的多播地址。
·?? 運行在群集的服務器可以監聽WebLogic Server 7.0的不同端口。
·?? 如果可以,使用單獨的硬件 (NIC)來路由群集多播通信,具體方法是配置網絡頻道,把內部群集通信與外部客戶端通信分離開來,這樣可以獲得更好的性能。
·?? 在一級群集(ex. war and EJB jar)中聯合頻繁被訪問的應用程序,以避免網絡信息流過大。
·?? 要啟用servlets和 JSP的自動故障恢復,使用復制技術。
·?? 內存中的復制比其他類型的復制要快。
·?? 使用內存中的復制時,要為群集中的服務器指定機器信息。
·?? 只有當您需要控制二次選擇過程時,才需要定義復制組。
·?? 在所有可能的地方使用服務器相似性可以提高性能。
·?? 公開使用可用的DNS名稱來標識WebLogic Server 實例,而不要使用啟用防火墻的環境中的IP地址。
·?? 如果一個WebLogic群集跨越了多個站點,站點間的網絡必須支持跨站點群集的多播通信。
·?? 借助這個跨越體系結構,您必須把群集的Multicast TTL 值配置得足夠高,才能防止路由器在多播包到達其目的地之前丟棄它們。
線程化
為了提高WebLogic Server的性能,請使用本機的I/O(性能包),如果它們可用的話。為了確保能正確初始化性能包,在啟動時要檢測錯誤。
可以把執行隊列設定為在溢出情形下增加線程。但是,避免使用服務器增加執行線程數目的能力,以管理常規的應用程序負載高峰期。相反地,進行仔細的容量規劃和服務器調整;為執行線程選擇一個最佳的數目。
技巧
·?? 只有當CPU利用率沒有到達100%,但是客戶端請求經常被阻塞和拒絕時,才能調整執行線程的數目。
·?? 調整線程數目時,如果吞吐量開始下降,或者CPU利用率下降或保持恒定,才能停止調整。
·?? 不要把Stuck Thread Max Time 和 Stuck Thread Time Interval 設置得過低,以至于在處理高峰期間,常規請求被誤認為是卡住得線程。
·?? 為了劃分應用程序組件或者給一個組件提供專門數量的資源,需要創建用戶定義的執行隊列。使用定制的執行隊列還可以避免出現潛在的跨服務器死鎖的情形。
·?? 為了給消息驅動bean提供專門的資源,需要對每個被部署的消息驅動EJB使用一個單獨的執行隊列。
·?? 診斷WebLogic Server上的死鎖故障和長期運行的請求時,使用一系列正確安排的線程轉儲來確定可能的原因。
·?? 如果通過隧道化(tunneling)在HTTP上使T3協議進行訪問,性能將下降大約15%;應避免在HTTP上使用隧道化T3。
測試技巧
·?? 在容量規劃和測試期間,要為應用程序可能引起的高峰負載擬訂計劃。
·?? 在測試期間優化應用程序;通常,在WebLogic Server 上,應用程序在性能和容量方面是限制最大的因素。
·?? 在壓力下測試系統性能時,要使用適當而現實的測試用例。
·?? 測試用例與生產情況越貼近,測試結果就越精確。
·?? 對應用程序進行基準測試時,忽略開始的幾個例子;運行測試例子來讓服務器VM“進行熱身”。
監控
使用特定于操作系統的統計來觀察線程行為和上下文切換。例如,在Solaris上,您可以使用mpstat、prstat、top來監控CPU利用率。mpstat公開CPU利用率、線程中斷,以及有意和無意的上下文切換。top將幫助您找出耗盡CPU的進程。
?
WebLogic管理控制臺可以用于監控正在運行的服務器、服務器線程、JVM堆的使用情況、日志文件、群集統計信息,等等。啟用SNMP監控可以利用現有的SNMP監控框架,以便通過中央管理服務器來監控您的WebLogic域資源。
?
1.01節:第三方監控工具也可用用于監控WebLogic Server使用的應用程序和系統資源(例如,Quest公司出品的spotlight,Acsera公司出品的Acsera,等等)。
技巧
·?? SNMP代理是域中管理服務器的一個組成部分,所以管理服務器實例的故障可能變成一個瓶頸。
·?? 為了監控WebLogic運行時Mbeans,除了管理控制臺之外,您還可以使用JMX監控工具。
JVM
使用JVM,它可以給服務器端的應用程序(例如 JRockit)提供更好的性能。管理控制臺可以用于圖形化地監控JVM堆的使用情況。
?
為了獲得更好的性能,要求使用特定于JVM提供商的選項進行測試。
例如,這些您可以設置的常見“熱點”JVM選項:
-XX +AggressiveHeap – 使用幾乎和整個物理內存一般大的堆。
-XX +UseISM – 使用隱私的共享內存 (Solaris)。
AggressiveHeap 警告:
1. 使用所有可用的內存。
2. 與 -Xms –Xmx不兼容。
3. 堆可能會從堆棧偷取內存。
隱私的共享內存警告 (僅針對 Solaris):
1. 鎖定內存;只在轉么系統上使用。
2. 內存碎片能夠防止分配連續的4 MB頁面。
3. 異常的JVM終止能夠導致出現鎖定段。
4. 要發現并刪除鎖定段,使用ipcs 和 ipcrm。
技巧
·?? 不要把服務器的堆大小設置得比機器上可用的自由RAM還大。
·?? 為了獲得高性能和高吞吐量,設置最小的JVM堆大小等于最大的堆大小。
·?? WebLogic Server用于低內存情況的日志記錄功能可以用于對可用自由內存進行采樣,以便檢測低內存的情況。
·?? 監控垃圾收集時,如果堆始終固定在85%空閑,那么試著減小堆大小。
·?? 進行設置時,-noclassgc確保將perm大小設置為大于默認值(32mb)。
·?? 在生產運行期間避免使用-verbosegc 選項。
·?? 在多CPU的機器上使用并行的垃圾收集算法,以減少垃圾收集的暫停時間。
·?? 在基于Intel的體系結構上,為了獲得更好的性能,把WebLogic配置為使用JRockit虛擬機。
·?? 要發現并刪除鎖定段,使用ipcs和 ipcrm。