本Blog所有內容不得隨意轉載,版權屬于作者所有。如需轉載請與作者聯系(
fastzch@163.com
)。
未經許可的轉載,本人保留一切法律權益。
一直以來,發現有某些人完全不尊重我的勞動成果,隨意轉載,提醒一下那些人小心哪天惹上官司。
一、關于各工具的使用,我簡單的整理總結了一下,列表如下:
ga(IBM Pattern Modeling and Analysis Tool for Java Garbage Collector)??
?分析WAS產生的GC Log的工具
?
jca(IBM Thread and Monitor Dump Analyzer for Java)
?分析WAS OOM時產生的(文件名以javacore開頭,后綴名為.txt
??例:javacore.20080731.200248.2324.txt)
ha(IBM HeapAnalyzer)
?分析WAS產生的Java Heap Dump的文件(文件后綴名為.phd)
二、關于在Windows上生成WebSphere的java heap dump 和 java core dump的操作,可以參考我的另一篇文章:
《[轉載]如何在Windows 平臺獲得WASv5.x/6.x的 Java HeapDump和JavaCore 診斷文件? 》
三、相關參考資料:
以下內容來自于WebSphere 的Info Center:?
以手動方式生成堆轉儲
使用此任務來手動生成堆轉儲。如果使用的 Sun Java 虛擬機(JVM)包含在 HP-UX 和 Solaris 操作系統上運行的 WebSphere Application Server,那么不支持此功能。
在您開始之前
雖然只有在檢測到內存泄漏時才會生成堆轉儲,但是,您必須知道,生成堆轉儲時會嚴重影響 WebSphere Application Server 的性能,并且時間長達數分鐘。因此,在以手動方式生成多個堆轉儲以便進行內存泄漏分析時,請確保泄漏的對象達到相當數目后才創建另一個堆轉儲。這樣,問題確定工具就能夠確定內存泄漏的根源。
關于本任務
您可能想以手動方式生成堆轉儲,以便對內存泄漏進行分析。在 WebSphere Application Server 中的 Java 虛擬機(JVM)上,無法自動生成堆轉儲。由于生成堆轉儲的成本相當高,因此,您可能想指定堆轉儲的生成時間。在 WebSphere Application Server 中的 JVM 上,可以通過對 WebSphere Application Server 受管 Bean(MBean,這些是特殊的 Java bean)執行 generateHeapDump 操作來以手動方式生成堆轉儲。WebSphere Application Server wsadmin 工具提供運行腳本的能力。您可以使用 wsadmin 工具來管理 WebSphere Application Server 安裝版本以及配置、應用程序部署和服務器運行時操作。WebSphere Application Server 僅支持 Jacl 和 Jython 腳本語言。有關 wsadmin 工具的更多信息,請參閱啟動 wsadmin 腳本客戶機主題。
過程
下一步做什么?
運行 wsadmin 命令后,將返回堆轉儲的文件名。有關查找堆轉儲的更多信息,請參閱查找和分析堆轉儲主題。在創建了一兩個堆轉儲之后,可使用許多內存泄漏問題確定工具來分析問題。Memory Dump Diagnostic for Java? i 是一個脫機工具,此工具可用于診斷造成 Java 堆內存泄漏的根本原因。請參閱診斷內存不足錯誤和 Java 堆內存泄漏,以了解更多信息。
診斷內存不足錯誤和 Java 堆內存泄漏
用于 Java? 的內存轉儲診斷是一個脫機工具,用于診斷 Java 堆中內存泄漏背后的根本原因。此工具分析內存轉儲(堆轉儲)的公共格式,該轉儲來自運行了 WebSphere? Application Server 的 Java 虛擬機(JVM)。內存轉儲的分析用于識別可能是內存泄漏根本原因的 Java 堆中的數據結構。此分析也識別主要組成應用程序的 Java 堆占用量的匯總對象組。此工具能夠分析出現內存不足問題的生產環境應用程序服務器中非常巨大的內存轉儲。
在您開始之前
IBM? 可移植堆轉儲(.phd),用于大多數平臺上的 WebSphere Application Server V5.1.x 和更高版本
IBM 文本,用于大多數平臺上的 WebSphere Application Server V4.x 和 V5.0.x
HPROF,用于 HP-UX 和 Solaris 平臺上的 WebSphere Application Server 安裝
關于本任務
當對象引用在它們不再需要后無意保留時,內存泄漏可能在 Java 應用程序中發生。即使 Java 語言有內建的垃圾回收機制來幫助程序員顯式釋放對象,這個問題也會阻止 Java 垃圾回收進程釋放內存。由于 Java 堆中大量的對象以及這些對象之間的復雜關系,因此很難在大型的復雜 Java 應用程序中診斷內存泄漏。
存在兩種類型的分析機制:單一轉儲分析和兩個轉儲的比較分析。此工具列示可疑的數據結構和數據類型,并在一個基于瀏覽器的交互式 Web 應用程序中顯示內存轉儲的內容。該工具在具有相似所有權結構的數據類型有效集圖形布局中顯示占用量分析結果。此工具將內存轉儲的內容顯示在用于瀏覽的交互式樹形視圖中,以及分別顯示在對象和數據類型的兩個表視圖中。樹形視圖允許您查找每個對象的所有入局和出局引用,以及查看每個具有可疑內存泄漏的數據結構中的容器對象位置。
以脫機方式分析內存轉儲為識別內存泄漏背后的根本原因提供了低開銷的機制。此機制特別適合于在生產中或在壓力測試環境中運行的大型應用程序,在這些地方經常首先檢測到內存泄漏。
過程
結果
這樣就識別出內存泄漏的可能根本原因。
- Java 堆分段存儲。在沒有連續的大塊可用 Java 堆空間可用來分配 Java 對象時,此分段存儲發生。此問題存在不同的原因,包括存在鎖住對象,或者因為出現重復的大對象分配。
- 本機堆中的內存泄漏。當一個本機組件(如 DB2? 連接)正在泄漏時,此問題發生。
對于這兩種情形,不管是否有大量的可用 Java 堆空間,內存不足錯誤都可能發生。因此,用于 Java 的內存轉儲診斷工具在確定這些情況中的根本原因時可能無效。
允許自動生成堆轉儲
使用此任務來啟用自動化堆轉儲生成。如果使用的 Sun Java 虛擬機(JVM)包含在 HP-UX 和 Solaris 操作系統上運行 WebSphere Application Server,那么不支持此功能。您需要研究一下如何在 Sun JVM 上收集堆轉儲,或者致電 IBM 支持機構。
在您開始之前
雖然只有在檢測到內存泄漏時才會生成堆轉儲,但是,您必須知道,生成堆轉儲時會嚴重影響 WebSphere Application Server 的性能,并且時間長達數分鐘。關于本任務
自動化堆轉儲生成支持,它僅在 IBM Software Development Kit 中可用,并且會分析 AIX、Linux 和 Windows 操作系統上的內存泄漏問題。
在相應的時間手動生成堆轉儲可能很困難。為了在進行內存泄漏檢測時幫助您分析內存泄漏問題,提供了一些自動化堆轉儲生成支持。此功能僅對 AIX、Linux 和 Windows 操作系統上的 IBM Software Development Kit 可用。
大多數內存泄漏分析工具對兩個堆轉儲執行不同形式的評估。在檢測可疑的內存情況時,將在相應的時間自動生成兩個堆轉儲。通常理想狀態是一進行問題檢測時就執行初始堆轉儲。在確定泄漏了一定量的內存后,監視內存使用情況并進行另一次堆轉儲,所以可比較堆轉儲以找出泄漏源。
為了在進行內存泄漏檢測時幫助您分析內存泄漏問題,提供了一些自動化堆轉儲生成支持。
要自動生成堆轉儲,請在管理控制臺中執行以下步驟:
過程
- 在管理控制臺導航樹中單擊服務器 > 應用程序服務器。
- 單擊 server_name > 性能和診斷顧問程序配置。
- 單擊運行時選項卡。
- 選中啟用自動堆轉儲收集復選框。
- 單擊確定。
結果
完成這些步驟后,系統將自動生成堆轉儲。要點:為了節省磁盤空間,如果在 WebSphere Application Server 主目錄中已有 10 個以上的堆轉儲,性能和診斷顧問程序就會停止創建堆轉儲。根據應用程序服務器上的堆大小以及工作負載的不同,創建堆轉儲的成本可能非常高,并且可能會暫時影響系統性能。