練習 1.2:擷取資料堆傾出
開始之前,您必須先完成練習 1.1:匯入必要的資源。
實務
您的組織有一個三層式的佇列作業系統,這個系統是 Web Proxy 應用程式的一部分。佇列作業系統的每一層都有自己的佇列。測試團隊判斷應用程式發生記憶體洩漏,而且懷疑是在佇列作業的系統中。身為佇列之一的開發人員,您被指派來判斷哪一層發生記憶體洩漏。
概觀
若要執行記憶體洩漏分析,您需要擷取兩個 Java 資料堆傾出。
資料堆是 Java 虛擬機器 (JVM) 在執行時用來儲存 Java 物件的記憶體區塊。Java 資料堆記憶體由記憶體回收器來管理,它會自動取消配置不再參照的 Java 物件。
資料堆傾出是特定時間的資料堆內容的影像。
您需要兩個資料堆傾出,才能看到應用程式執行過程中兩個時間點之間的記憶體用量變更。內建演算法會比較資料堆,並識別不應該再停留於記憶體中的物件。演算法分析下列指標來識別可能的洩漏情況:在兩個資料堆傾出之間的整段時間都存在記憶體中的物件、在第二個資料堆中的某個給定類別的物件數增加,以及物件的參照數。
準備擷取資料堆傾出
若要擷取資料堆傾出,您必須切換至「側寫和記載」視景:
- 從 Software Development Platform 功能表列,按一下視窗 > 開啟視景 > 其他。這時會開啟「選取視景」對話框。
- 在對話框的左下部分,按一下顯示全部。勾選框中會出現勾號。
- 從視景清單中,選取側寫和記載,再按一下確定。
- 如果開啟「確認啟用」對話框,請按一下一律啟用功能,以後不要再問我,再按一下確定。
- Software Development Platform 切換至「側寫和記載」視景。
擷取資料堆傾出
在這個教學指導中,您將要手動擷取資料堆傾出。(另外,您可以設定時間間隔來自動擷取資料堆傾出,或匯入現有的資料堆傾出。)
若要擷取資料堆傾出:
- 執行應用程式:
- 在功能表列按一下執行 > 側寫。這時會開啟「側寫」對話框。
- 在「配置」清單中,按兩下 Java 應用程式。清單中會出現 New_configuration 項目。
- 在「名稱」欄位中,輸入 ThreeTierQueue_MemLkAnalysis。
- 在「主要」標籤中的「專案」欄位旁邊,按一下瀏覽。這時會開啟「選取專案」對話框。
- 選取 ThreeTierQueue,然後按一下確定。
- 在「主要類別」欄位旁邊,按一下搜尋。
- 在「選擇主要類型」對話框中,選取 TestThreeTierQueue,然後按一下確定。
- 在「側寫」對話框中,按一下「側寫」標籤。
- 在「概觀」子標籤中,勾選「記憶體洩漏分析 - 手動資料堆傾出」側寫集的勾選框。(側寫集定義執行時期要收集的側寫資料類型。)
- 按一下側寫。應用程式執行,並顯示如下列的變化:
- 「側寫監視器」中出現處理程序的「側寫」資源和代表「自動分析洩漏」側寫類型的項目。
- 畫面會開啟「洩漏候選項」視圖,並顯示內含下一步如何處理之指示的「現行狀態」訊息。
附註:如果出現無法使用 Agent Controller 的「安全性訊息」,請閱讀如果您無法收集資料。
- 擷取資料堆傾出:
- 在功能表列按一下視窗 > 顯示視圖 > 主控台開啟「主控台」視窗,讓您可以在應用程式執行時跟隨著應用程式進行。
- 讓應用程式暖機約半分鐘,確定您要進行側寫的所有類別都已載入並起始設定。
- 遵循「洩漏候選項」視圖中的指示:按一下「擷取資料堆傾出」工具列按鈕
來擷取基準資料堆傾出(資料堆比較的起點)。「側寫監視器」中出現代表資料堆傾出的另一個項目。
- 讓應用程式再執行一分鐘,同樣遵循「洩漏候選項」視圖中的指示,以相同的方式擷取第二個資料堆傾出。「側寫監視器」中出現第二個資料堆傾出的項目。
- 按一下「主控台」視圖中的「終止」按鈕
來終止程序。
如果您無法收集資料
Agent Controller 必須在執行中才能收集任何類型的側寫資料。如果出現無法使用 Agent Controller 的訊息,請確定已安裝 Agent Controller、以手動方式啟動 Agent Controller,然後再試一次。如需指示,請參閱安裝手冊。您可以利用啟動程式來存取安裝手冊,或者在產品光碟的 disk1/install.html 之下找到安裝手冊。
完成收集資料之後,您已準備好開始進行練習 1.3:分析洩漏候選項。