亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4116 | 回復: 0
打印 上一主題 下一主題

[WebSphere] 再談WebSphere的類加載和故障排查 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-04-19 13:07 |只看該作者 |倒序瀏覽
再談WebSphere的類加載和故障排查



今天再次整理了IBM developerworks里有參考價值的文章,希望在遇到ClassCastException、ClassNotFoundException、NoClassDefFoundException、UnsatisfiedLinkError的錯誤時提供解決思路。

《IBM WebSphere 開發(fā)者技術(shù)期刊: 類路徑?jīng)_突的鑒別》一文描述了應用遷移過程中所發(fā)生的“故障”,打引號那是因為WAS并沒有發(fā)出ClassNotFoundException、NoClassDefFoundException等的錯誤信息,而是“并非預期中的表現(xiàn)”。最終排查的結(jié)果是:

其結(jié)果是 C:/Program Files/IBM/WebSphere Studio/Application Developer/v5.1.1/runtimes/base_v51/lib/jython.jar ,而不是我們期望的 WEB-INF/lib/jakarta-oro-2.0.7.jar 。

這是一個很典型的類加載錯誤例子,默認的PARENT_FIRST加載模式讓類加載器從應用程序 類裝入器中先加載了jython.jar(正好有需要的同名類),而不是Web 模塊類裝入器里正確的jakarta-oro-2.0.7.jar。解決的方法可以啟用PARENT_LAST 加載模式即可。文章中檢測類加載路徑的Servelet可以作為參考,不過我覺得一般會用-verbose 命令行選項打開 IBM JVM 的詳細輸出、trace某個確定類的情況或者dump的方法找到類加載路徑。

調(diào)試方法
《類裝入問題解密,第 1 部分: 類裝入和調(diào)試工具介紹》 介紹了這三種方法



可以用 -verbose 命令行選項打開 IBM JVM 的詳細輸出。當某些事件發(fā)生的時候(例如,類裝入時),詳細輸出會在控制臺上顯示信息。要想得到額外的類裝入信息,可以用詳細類輸出。可以用 -verbose:class 選項啟動這個模式。

解釋詳細輸出
詳細輸出列出已經(jīng)打開的所有 JAR 文件,包括到這些 JAR 的完整路徑。下面是一個示例:

...
[Opened D:\jre\lib\core.jar in 10 ms]
[Opened D:\jre\lib\graphics.jar in 10 ms]
...所有裝入的類都已經(jīng)列出,同時還指出它們是從哪個 JAR 文件或目錄裝入的。例如:

...
[Loaded java.lang.NoClassDefFoundError from D:\jre\lib\core.jar]
[Loaded java.lang.Class from D:\jre\lib\core.jar]
[Loaded java.lang.Object from D:\jre\lib\core.jar]
...

可以僅輸出某個特定的類加載情況,剔除無關(guān)緊要的類:

-Dibm.cl.verbose=<class name>?梢杂谜齽t表達式聲明類的名稱,例如 Hello* 會跟蹤所有以 Hello 開頭的名稱。

更準確的就是用trace工具來跟蹤java代碼



IBM JVM 有一個內(nèi)置的方法跟蹤工具。這樣,不需要修改 Java 代碼,就可以跟蹤任何 Java 代碼(包括核心系統(tǒng))中的方法。因為這個工具可以提供大量數(shù)據(jù),所以可以控制跟蹤的級別,只獲取需要的信息。

比較常用的步驟是

1.在控制臺導航樹中單擊故障診斷 > 記錄和跟蹤,然后單擊服務器 > 診斷跟蹤。
2.單擊配置。
3.選中啟用記錄復選框啟用跟蹤,清除此復選框禁用跟蹤。
…………

1.
1.在控制臺導航樹中單擊故障診斷 > 記錄和跟蹤。
2.選擇服務器名。
3.單擊更改日志級別詳細信息。
4.如果已啟用所有組件,那么可能要關(guān)閉它,然后啟用特定組件。
5.單擊組件或組名。要獲取更多詳細信息,請參閱日志級別設置 。 如果所選服務器未在運行,您將無法以圖形方式查看個人組件。
6.在跟蹤字符串框中輸入跟蹤字符串。
7.選擇應用,然后選擇確定。
要輸入跟蹤字符串以將跟蹤規(guī)范設置為需要的狀態(tài):

亦可以在故障診斷 > 類裝入器查看器 以訪問企業(yè)應用程序拓撲頁。

在“類裝入器查看器”頁中,單擊搜索以訪問搜索頁,在該頁面上,可以在類裝入器中搜索下列內(nèi)容:

特定字符串
特定 .jar 文件
特定目錄中的文件名
特定類裝入器裝入的文件名
搜索區(qū)分大小寫

用Trace來跟蹤應用程序情況其實是很有技術(shù)含量的活,能自成一章。我接觸的項目基本到了這一層都是由開發(fā)人員去找BUG,所以實踐比較少,沒有分享的心得。有機會的話我以后學習學習再寫。

如果你覺得用trace來跟蹤調(diào)試比較復雜,那么可以直接生成一個javacore文件,里面會記錄類裝入器信息。推薦用wsadmin命令來生成core文件,因為kill -3帶出個heapdump可就不好玩了。

鍵入wsadmin.bat命令,進入wsadmin管理命令行,鍵入如下代碼:

set jvm [$AdminControl completeObjectName type=JVM,process=server1,*]
$AdminControl invoke $jvm dumpThreads

javacore.TIMESTAMP.NUMBER.txt  文件會自動在C:\WebSphere\AppServer或C:\WebSphere\AppServer\default\或您指定的目錄中產(chǎn)生。

解決問題
了解了查找的方法,那么就可以開始解決問題:《類裝入問題解密,第 2 部分: 基本的類裝入異!



ClassNotFoundException 是最常見的類裝入異常類型。它發(fā)生在裝入階段。Java 規(guī)范對 ClassNotFoundException 的描述是這樣的:

當應用程序試圖通過類的字符串名稱,使用以下三種方法裝入類,但卻找不到指定名稱的類定義時拋出該異常。

類 Class 中的 forName() 方法。
類 ClassLoader 中的 findSystemClass() 方法。
類 ClassLoader 中的 loadClass() 方法。
所以,如果顯式地裝入類的嘗試失敗,那么就拋出 ClassNotFoundException。

通過拋出 ClassNotFoundException,類裝入器提示,定義類時所需要的字節(jié)碼在類裝入器所查找的位置上不存在。這些異常修復起來通常比較簡單?梢杂 IBM 的 verbose 選項檢查類路徑,確保使用的類路徑設置正確。如果類路徑設置正確,但是仍然看到這個錯誤,那么就是需要的類在類路徑中不存在。要修復這個問題,可以把類移動到類路徑中指定的目錄或 JAR 文件中,或者把類所在的位置添加到類路徑中。

更多的解決方法請看原文,第三第四部分的《類裝入問題解密,第 3 部分: 處理更少見的類裝入問題》、

《類裝入問題解密,第 4 部分: 死鎖和約束》就當擴展閱讀好了。

個人感想
類加載問題是一個不難解決卻又令人頭疼的問題,特別當多個應用部署在一起的時候。問題狀況相似,其實出錯的原因并不相同,往往單獨成功的例子——例如jar包換個目錄,對于另一個環(huán)境卻束手無策。網(wǎng)上有不少的“解決案例”就是這種情況,所以我把“漁”的方法整理在這里,并非個人原創(chuàng),都是照搬IBM developerworks已有的內(nèi)容。慚愧之余,也感嘆一下IBM的強大。其它的大型廠商,Oracle是需要Metelink帳號才能看到最有用的資料;SAP也需要購買產(chǎn)品后才能查看詳細文檔,否則就是簡陋兩字;Microsoft的KB和webcasting做的很好,但是本地化和有價值的文章卻遜一籌。在都想依靠服務賺錢的現(xiàn)在,IBM沒有把這些資料敝帚自珍,讓我們有個學習交流的環(huán)境,這也許是它數(shù)十年它經(jīng)久不衰的奧秘之一吧
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP