?近期某項(xiàng)目, 在客戶(hù)方運(yùn)行時(shí)經(jīng)常莫名其妙的死機(jī), 因此急需調(diào)查死機(jī)的原因以及盡可能的尋找解決辦法.
分析此場(chǎng)景, 此系統(tǒng)是一個(gè)Java的web系統(tǒng), 使用到了EJB. 具體系統(tǒng)架構(gòu)為:由客戶(hù)端訪(fǎng)問(wèn)某Sun ONE Server, 系統(tǒng)的JSP、Servlet存在于此Sun ONE Server上, 然后Sun ONE Server上的Servlet或JavaBeans再訪(fǎng)問(wèn)另一臺(tái)機(jī)器上的Weblogic上的EJB, 然后EJB通過(guò)DAO訪(fǎng)問(wèn)三臺(tái)Oracle數(shù)據(jù)庫(kù), 其中一臺(tái)Oracle數(shù)據(jù)庫(kù)中又被劃分為五個(gè)表空間, 因此在Weblogic上分別建立了七個(gè)Connection Pool以及對(duì)應(yīng)的七個(gè)XA datasource. 此系統(tǒng)的EJB數(shù)量多達(dá)500+,?發(fā)布的J2EE應(yīng)用程序以及web應(yīng)用程序有200+,?總體來(lái)說(shuō), 整體結(jié)構(gòu)比較復(fù)雜.
對(duì)于這樣一個(gè)系統(tǒng), 要想分析一個(gè)無(wú)法再現(xiàn)的bug是非常不容易的, 這個(gè)也是這次具有挑戰(zhàn)性的地方.
首先, 我們打開(kāi)了所有服務(wù)器上的日志輸出, 進(jìn)而分析了所有的日志. 最后把問(wèn)題定位在Weblogic連接數(shù)據(jù)庫(kù)的connection pool上. 但是在Weblogic 8.1上, 我們通過(guò)JDBC log得到的Connection Pool的信息非常有限, 那么如何能更多的得到數(shù)據(jù)庫(kù)連接的信息呢? 我們?cè)诰W(wǎng)上發(fā)現(xiàn)了一個(gè)開(kāi)源工具Hyperic-HQ協(xié)助我們很好地解決了這次問(wèn)題.
關(guān)于Hyperic-HQ, 是一個(gè)GPL的開(kāi)源產(chǎn)品, 可以協(xié)助我們分析在發(fā)布環(huán)境下的系統(tǒng)各個(gè)機(jī)能的狀態(tài). 進(jìn)而找到應(yīng)用程序的問(wèn)題.
要想使用Hyperic-HQ, 首先我們需要一臺(tái)Hyperic-HQ服務(wù)器, 可以用自己的PC機(jī)充當(dāng). 另外, 我們需要一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器, 用來(lái)做Hyperic-HQ的數(shù)據(jù)倉(cāng)庫(kù). 我使用的是Hyperic-HQ 2.7.3版本, 這個(gè)版本支持Oracle和Postgresql作為Hyperic-HQ的后臺(tái)數(shù)據(jù)庫(kù).
接下來(lái), 我們從Hyperic-HQ的網(wǎng)站上下載Hyperic-HQ的安裝程序, 有很多版本. 一般地, 根據(jù)操作系統(tǒng)不同不同, 另外, 有含有JRE和非JRE的, 以及agent和installer區(qū)分. 我們第一次安裝的時(shí)候, 因?yàn)橐惭bHyperic-HQ服務(wù)器, 所以應(yīng)該下載installer版本.
下載后我們?cè)谀硞€(gè)目錄下解壓縮, 目錄內(nèi)容如圖所示.
然后我們運(yùn)行setup程序, 安裝Hyperic-HQ服務(wù)器, 安裝過(guò)程中, 需要指定Hyperic-HQ服務(wù)器的后臺(tái)數(shù)據(jù)庫(kù)的信息. 一步步直到安裝完成. 安裝好后, 會(huì)有一段文字提示Hyperic-HQ服務(wù)器的運(yùn)行以及訪(fǎng)問(wèn)地址, 包括默認(rèn)的賬號(hào).
Hyperic-HQ服務(wù)器的默認(rèn)訪(fǎng)問(wèn)地址是http://localhost:7080
默認(rèn)賬號(hào)是 hqadmin/hqadmin
安裝好Hyperic-HQ服務(wù)器后, 我們需要在被監(jiān)視的服務(wù)器上安裝Hyperic-HQ的agent. 你可以單獨(dú)下載agent, 如果你已經(jīng)下載了installer, 那么它里面就包含了agent. 和上述過(guò)程同樣, 依照提示一步一步安裝agent. 安裝agent的過(guò)程非常簡(jiǎn)單.
全部準(zhǔn)備完畢后, 就可以開(kāi)始監(jiān)視有問(wèn)題的服務(wù)器了.
首先啟動(dòng)Hyperic-HQ服務(wù)器, 啟動(dòng)方法是運(yùn)行hq-server.exe.
啟動(dòng)后, 我們可以訪(fǎng)問(wèn)Hyperic-HQ服務(wù)器的web頁(yè)面, 登錄后應(yīng)該是沒(méi)有什么可用信息, 這是因?yàn)槲覀冞€未啟動(dòng)任何agent.
現(xiàn)在就讓我們來(lái)啟動(dòng)Hyperic-HQ服務(wù)器的agent. 在啟動(dòng)agent的時(shí)候我們必須指定一些信息, 其中主要包括agent如何和Hyperic-HQ服務(wù)器通訊的信息.

此時(shí), 我們?cè)俚卿汬yperic-HQ服務(wù)器的web頁(yè)面就可以看到agent管理的服務(wù)器上的資源.
然后我們?cè)趙eb頁(yè)面上就可以通過(guò)一些配置來(lái)配置我們所感興趣的資源. Hyperic agent就可以從被監(jiān)視的服務(wù)器上定時(shí)取下我們配置的資源, 通過(guò)Hyperic-HQ服務(wù)器顯示在web頁(yè)面上. 當(dāng)然也可以log到日志里.

