利用 Memory Dump Diagnostic for Java (MDD4J) 分析內存管理問題

利用 Memory Dump Diagnostic for Java (MDD4J) 分析內存管理問題(2)

啓動和理解 MDD4J[size=1.0625]爲了充分理解如何使用 MDD4J,您須要瞭解用於描述內存泄漏的幾個術語的含義。圖 1 經過名爲 MyClass 的示例展現了這些術語,此示例具備一個 HashSet,包含字符串對象。
圖 1. 內存泄漏術語
  • 泄漏根:包含致使泄漏容器的對象鏈的引用的對象。若是在全部者鏈中未發現任何類對象,則此術語表示可找到泄漏容器的內存轉儲中的根對象。
  • 泄漏容器:惟一擁有全部泄漏對象的對象。在本例中是 HashMap。
  • 泄漏單元:存在多個實例的數據結構內的對象。在本例中是 HashMap 內的 HashMap$Entry 對象。
  • 全部者鏈:從泄漏根對象開始到泄漏容器對象的對象鏈。
  • 內容:泄漏根下爲堆消耗的大部分負責的實際數據。
[size=1.0625]另外還有一些未在圖 1 中出現的信息,但與內存泄漏相關:
  • 區域大小:給定對象可接觸的全部對象的總大小。在本例中,就是影響泄露根的區域大小的全部對象。
  • 區域大小落差:一個對象的區域大小和該對象的子對象的區域大小之間的差異。此差異與實例計數的差異是發現泄漏疑點的關鍵。
[size=1.0625]MDD4J 的啓動與 IBM Support Assistant workbench 中安裝的其餘工具相同。圖 2 顯示了 workbench 中的 MDD4J 在啓動並完成分析後的狀態。在分析完成後,您看到的第一個視圖就是 Analysis Summary。(若是但願將 MDD4J 從 workbench 導出到其餘機器上,將有一個批處理文件或 shell 腳本可用於運行此工具)。
[size=1.0625]在下面的幾節中,您將瞭解分析結果在 MDD4J 中的顯示方式。所顯示的信息針對主轉儲。
評估分析結果[size=1.0625]Analysis Summary 是您在分析完成後看到的第一個視圖。它顯示了分析結果的信息彙總,並提供了堆內容和堆中主要組成部分的快速概覽。在這個窗格中,能夠肯定在堆大小中佔最大比例的組件和類型。
圖 2. IBM Support Assistant workbench 中的 MDD4J[size=1.0625]Analysis Summary 具備三個部分:
  • Basic Heap Information(如圖 3 所示)顯示關於堆和堆轉儲文件的信息:堆大小、對象數量、對象類型數量、堆轉儲文件名稱和堆轉儲文件的獲取日期。圖 3. Basic Heap Information
  • High-level Summary of the Heap Contents(如圖 4 所示)顯示了兩個圖表,顯示在堆大小中佔比例最大的堆轉儲中的組件和類型。
    • Predefined Components 圖顯示了與 Java 和 WebSphere 應用程序中的經常使用組件相比,各組對象在堆大小中所佔的相對比例。
    • Type Breakdown 圖顯示了最經常使用的 Java 類在堆大小中所佔的相對比例。
    圖 4. High-level Summary of the Heap Contents
[size=1.0625]在 Analysis Summary 視圖中,還可訪問單一文件的 HTML 報告(如圖 2 所示),其中提供了分析結果的彙總。報告包含 MDD4J 中各類視圖提供的全部信息,但未顯示圖形。可利用此報告與您的同事快速共享分析結果。
[size=1.0625]還能夠下載一部分 MDD4J 用戶界面(Data Structures[size=1.0625] 選項卡,本文稍後將加以介紹),將其做爲 Yeti Report[size=1.0625] 獨立報告(如圖 2 所示),並保存所獲得的 .zip 壓縮文件。將壓縮文件的內容解壓到空目錄中,在 Web 瀏覽器中打開 index.html 文件。關於 Yeti,請參見 認識大型堆。
相關文章
相關標籤/搜索