王立瑋 李世猛 劉汝坤
摘 要:本文針對(duì)WebLogic Server實(shí)例的構(gòu)架建立過程中可能遇到的問題、提出一些解決方法和優(yōu)化設(shè)置的手段。特別是在大型系統(tǒng)中WebLogic Cluster集群應(yīng)如何合理設(shè)置以及在運(yùn)維的過程中,面對(duì)應(yīng)用服務(wù)器節(jié)點(diǎn)眾多的情況下,如何迅速定位故障節(jié)點(diǎn)和進(jìn)行快速處理,給出了各種實(shí)踐的技術(shù)和經(jīng)驗(yàn)。
關(guān)鍵詞:WebLogic ;JVM內(nèi)存;故障定位
1.引言
一名中間件技術(shù)人員,時(shí)常會(huì)面臨這樣的具體問題:WebLogic的JVM內(nèi)存堆應(yīng)該如何設(shè)置,才能盡可能地調(diào)優(yōu)應(yīng)用的性能?如何最高效地發(fā)揮應(yīng)用服務(wù)器的硬件性能?對(duì)于集群,如何監(jiān)控集群,如何快速定位故障節(jié)點(diǎn),如何高效地處理故障Server。本文主要就這些問題,針對(duì)WebLogic平臺(tái),提供了一些日常運(yùn)維的經(jīng)驗(yàn)和解決方法。
2.WebLogic Server及內(nèi)存堆的設(shè)置
2.1依據(jù)CPU和內(nèi)存設(shè)置Server實(shí)例
WebLogic集群中的Server在版本一致的情況下,能夠?qū)⑵渑渲糜谝慌_(tái)主機(jī),也能將其配置于多臺(tái)主機(jī),因?yàn)閼?yīng)用服務(wù)器并非只能應(yīng)用單一Weblogic Server實(shí)例,而是可以應(yīng)用多個(gè)Weblogic Server實(shí)例,這就引出了一個(gè)重要問題,即怎么合理應(yīng)用Server,控制其數(shù)量?既保證了硬件設(shè)備資源不浪費(fèi),又可以滿足應(yīng)用實(shí)例對(duì)服務(wù)器資源的正常消耗。
主要從兩個(gè)方面來分析:一個(gè)是內(nèi)存,這主要根據(jù)服務(wù)器的物理內(nèi)存及自身應(yīng)用對(duì)內(nèi)存的實(shí)際需求來確定,一般要求不能占用超過八成的RAM。另一方面需要考慮CPU占用,實(shí)例證明,要保證Weblogic Server具有最優(yōu)的可伸縮性,就需要采用合理的配置方式,一般采用一個(gè)實(shí)例占用兩個(gè)CPU的形式??傊?,在配置實(shí)例時(shí),需要考慮這兩方面的情況,在不影響服務(wù)器性能的情況下優(yōu)化配置。
2.2監(jiān)控GC、優(yōu)化JVM內(nèi)存堆設(shè)置
一般最好不要隨意調(diào)整JVM的參數(shù),除非提前進(jìn)行了大量計(jì)算和分析,這是由于JVM5預(yù)置時(shí)做了自動(dòng)調(diào)整情,一般情況下是符合計(jì)算機(jī)的運(yùn)行要求的。當(dāng)然,如果追求最佳狀態(tài),可以在后期對(duì)其進(jìn)行精密調(diào)整。JVM GC的調(diào)整十分冗雜,需要根據(jù)計(jì)算機(jī)的自身運(yùn)行狀況進(jìn)行配置,比如根據(jù)實(shí)際情況下計(jì)算機(jī)的CPU數(shù)量、內(nèi)存大小等進(jìn)行調(diào)整,同時(shí)也需要考慮到應(yīng)用程序自身的特殊情況,進(jìn)一步調(diào)整和優(yōu)化。
JVM內(nèi)存的優(yōu)化調(diào)整是為了降低GC頻率,并降低FullGC的頻數(shù)。如何能夠選擇合適的JVM內(nèi)存設(shè)置,可以加入如下參數(shù)收,參考對(duì)GC的監(jiān)控,進(jìn)行判斷:
GCARGS="-XX:+PrintGCDetails-XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps\
-XX:+PrintTenuringDistribution -Xloggc:/tmp/tsd-gc-`date +%s`.log"
JVM提供兩種較為簡(jiǎn)單的GC策略的設(shè)置方式
1)吞吐量?jī)?yōu)先
JVM以吞吐量為指標(biāo),自行選擇相應(yīng)的GC策略及控制新生代與舊生代的大小比例,來達(dá)到吞吐量指標(biāo)。這個(gè)值可由-XX:GCTimeRatio=n來設(shè)置。
2)暫停時(shí)間優(yōu)先
JVM以暫停時(shí)間為指標(biāo),自行選擇相應(yīng)的GC策略及控制新生代與舊生代的大小比例,盡量保證每次GC造成的應(yīng)用停止時(shí)間都在指定的數(shù)值范圍內(nèi)完成。這個(gè)值可由-XX:MaxGCPauseRatio=n來設(shè)置。
3.集群實(shí)例典型問題
3.1大型集群如何快速定位故障Server實(shí)例
客戶會(huì)反饋應(yīng)用系統(tǒng)產(chǎn)生異常,此時(shí)運(yùn)維人員需要面對(duì)在集群中的大量應(yīng)用服務(wù)器。很難快速有效的定位到特定的Server。這就對(duì)迅速準(zhǔn)確找到出現(xiàn)問題的Server實(shí)例提出了要求,因?yàn)橹挥型ㄟ^對(duì)問題Server實(shí)例的排查和修復(fù),才能快速恢復(fù)應(yīng)用服務(wù)器的相關(guān)功能。一般可以通過環(huán)境變量來實(shí)現(xiàn),只需寫入必備的一些簡(jiǎn)單Java代碼,既能根據(jù)環(huán)境變量快速去的出現(xiàn)問題的實(shí)例,保證了服務(wù)器服務(wù)用戶的連續(xù)性。
S t r i n g s t r S e r v e r N a m e=S y s t e m.getProperty("weblogic.Name");
response.getWriter)(.println(strServerName);
上文所寫代碼即可用在問題實(shí)例排查中,只需將其編寫進(jìn)一個(gè)JSP文件,當(dāng)用戶使用時(shí)遇到異常情況時(shí),協(xié)助其打開JSP文件中的URL即可快速確定出現(xiàn)問題的Server實(shí)例,然后確定這是哪一臺(tái)應(yīng)用程序服務(wù)器產(chǎn)生了問題(需要注意的是這里提出的手段是基于檢測(cè)端口受監(jiān)聽情形下的,如果檢測(cè)工具自身發(fā)生問題,本手段是無法檢測(cè)到的)。
3.2多個(gè)Cluseters保證系統(tǒng)的穩(wěn)定和不間斷服務(wù)
首先在實(shí)踐中發(fā)現(xiàn)WebLogic集群,是不適合有太多的WebLogic Server實(shí)例,因?yàn)镾erver實(shí)例會(huì)定期與其他Server實(shí)例交流,以確定每一個(gè)Server連續(xù)的可用性,如果配置太多的Server實(shí)例會(huì)導(dǎo)致其占用太多系統(tǒng)資源,進(jìn)而降低計(jì)算機(jī)性能。此外,WebLogic管理服務(wù)器功能之一是檢測(cè)Server實(shí)例的運(yùn)行狀況。會(huì)對(duì)每個(gè)Server狀態(tài)進(jìn)行檢測(cè)。如果有Server實(shí)例的運(yùn)轉(zhuǎn)出現(xiàn)問題,比如運(yùn)行過程中出現(xiàn)內(nèi)存溢出的情況,這是一種較為常見但處理速度卻較慢的情況,因?yàn)閮?nèi)存溢出會(huì)導(dǎo)致計(jì)算機(jī)運(yùn)行降速,同時(shí)導(dǎo)致Weblogic系統(tǒng)運(yùn)行降速,進(jìn)而不能迅速地處理問題。針對(duì)這種情況可以增加WebLogic集群,以阻止單一問題影響整個(gè)服務(wù)器的工作。此外,在配置WebLogic集群時(shí),應(yīng)將其應(yīng)用在多個(gè)域下,其性能的影響會(huì)更小。
其次當(dāng)應(yīng)用程序更新和發(fā)布時(shí),或在處理某些故障時(shí),必須重新啟動(dòng)整個(gè)群集的Server。如果應(yīng)用層僅配置單一WebLogic集群,那么對(duì)系統(tǒng)應(yīng)用的流暢運(yùn)行是存在安全隱患,因?yàn)槠洳荒軕?yīng)對(duì)計(jì)算機(jī)關(guān)機(jī)重啟的情況,甚至?xí)霈F(xiàn)斷層的情況。這使得整個(gè)應(yīng)用服務(wù)系統(tǒng)能夠不間斷地為外界提供服務(wù)。這種集群方法減少了單個(gè)應(yīng)用程序服務(wù)器故障對(duì)整個(gè)應(yīng)用程序集群的影響,建立多個(gè)合適的集群可以避免單個(gè)集群造成的單點(diǎn)故障。為整個(gè)系統(tǒng)的不間斷服務(wù)提供了技術(shù)保證。
4.節(jié)點(diǎn)管理器故障處理的實(shí)用工具
節(jié)點(diǎn)管理器是一個(gè)WebLogic Server的實(shí)用工具,可以使用它來啟動(dòng)、關(guān)閉和重新啟動(dòng)遠(yuǎn)程位置上的管理節(jié)點(diǎn)和受管節(jié)點(diǎn)。WebLogic Server生產(chǎn)環(huán)境中的服務(wù)器實(shí)例通常分布在多個(gè)域、計(jì)算機(jī)和地理位置上。節(jié)點(diǎn)管理器進(jìn)程與特定WebLogic域無關(guān),而與計(jì)算機(jī)有關(guān)。通過使用節(jié)點(diǎn)管理器,為運(yùn)維人員在處理類似一臺(tái)應(yīng)用服務(wù)器掛死、重啟等常規(guī)操作時(shí),提供了極大的方便,節(jié)點(diǎn)管理器再配置自動(dòng)重啟后,可以縮短處理時(shí)間,并且可以繞過WebLogic Adminserver出故障導(dǎo)致的控制臺(tái)無法正常登陸的現(xiàn)象,減少服務(wù)器故障導(dǎo)致的應(yīng)用系統(tǒng)不可用的時(shí)間,保障系統(tǒng)的穩(wěn)定性和高可用性。
5.結(jié)語
以上是在日常運(yùn)維過程中有關(guān)WebLogic使用經(jīng)驗(yàn)總結(jié)和探討,一方面充分驗(yàn)證了WebLogic在性能上的安全性和可靠性;另一方面通過不斷的實(shí)踐、測(cè)試調(diào)整才能更好的利用現(xiàn)有資源的情況下做到優(yōu)化提升。作為一名IT技術(shù)人員應(yīng)該追求的一個(gè)重要的目標(biāo)就是不斷地學(xué)習(xí),努力實(shí)踐解決技術(shù)問題,保障企業(yè)系統(tǒng)的穩(wěn)定、安全運(yùn)行。
參考文獻(xiàn):
[1]李曉溪. 利用Coherence擴(kuò)展WebLogic集群會(huì)話復(fù)制功能及應(yīng)用[D].復(fù)旦大學(xué),2013.
[2]章珺,郭學(xué)鋒,蔣鴻城.WebLogic應(yīng)用典型問題分析和解決[J].計(jì)算機(jī)安全,2007(12):47-49.