使用 Yourkit 查詢記憶體洩漏

工程 | Dave Syer | 2009年7月5日 | ...

今天使用 Yourkit 有了非常棒的體驗,我想寫一篇快速推薦。 距離我上次大量使用它已經幾年了,即使那時它也是我能找到的最好的工具,但現在它真的非常棒。 我沒有對市場進行詳盡的調查,這不是本次練習的目的:我只是想要一個解決問題的工具。

這是我今天的故事:沮喪,然後惱火,最後是滿意。 我懷疑 Spring Batch 中存在記憶體洩漏,我需要快速追蹤它。 這件事的背景是,我已經見過很多記憶體洩漏,但我已經很久沒有在第一線處理過這種問題了。 我現在生活STS 中(有時在夢中也是如此),所以我需要一個在 IDE 中工作良好的工具。 我嘗試了兩個工具,但僅僅是因為第一個選擇不起作用。 我嘗試的兩個是 TPTPYourkit

我在 JUnit 中編寫了一個簡單的整合測試,並使用這兩個工具對其進行了分析。 我可以從任一工具的記憶體分析中看出,程序結束時堆中存在太多 JobExecution 型別的物件,而我需要知道的是誰在保留不應該保留的對它們的引用? 似乎是一個足夠簡單的問題。

由於 Eclipse 是 STS 的核心,我想看看 Eclipse 效能監控工具 (TPTP) 是否比上次我嘗試時好。 經過半天的折騰,簡短的答案是“沒有”。 長版本是,如果不安裝晦澀難懂的過時共享庫(在 Ubuntu Ibex 上),它根本無法工作,即使它執行,記憶體分析中也沒有任何有用的資訊來追蹤洩漏。 Google 可以幫助您解決第一個問題(我不知道為什麼 TPTP 文件在這方面如此糟糕),但不能解決第二個問題。 我可以從 TPTP 中獲取足夠的資訊來看到存在洩漏,但我仍然不知道它來自哪裡。 問題在於,報告僅告訴您堆中的物件是什麼以及最初分配它們的程式碼行,這離知道誰在程序結束時引用它們太遠了。 結論:TPTP 比幾年前好幾個數量級,但實際上仍然相當無用。

所以我繼續使用 Yourkit,我知道它可以輕鬆解決這個問題,但擔心安裝和工具。 我發現 Eclipse 工具現在非常出色(上次我看的時候它不見了),更棒的是,我大約 5 分鐘就找到了記憶體洩漏的根源。 還不錯。 如果你想知道殺手級功能是什麼,那就是:能夠瀏覽堆和所有物件引用。 另一個很大的幫助是,在程序結束時會自動拍攝快照,因此您可以編寫一個簡單的單元測試,從 IDE 中對其進行分析,只需點選幾下即可將堆載入到 Yourkit UI 中。

如果您想知道,Spring Batch 問題很小(僅影響快照版本),並且很容易修復。

我知道 Mark 和 Filip 以及 SpringSource 的其他人在使用 Yourkit(例如,請參閱 這篇博文),而且我問的每個人都很喜歡它。 但是,如果我們在文章和諮詢活動中提及它,它往往會被埋沒在很多其他東西中,所以我希望這篇小文章能夠將 Yourkit 提升到您的堆疊中。

免責宣告:我與 Yourkit 沒有個人或商業利益關係。

獲取 Spring 新聞簡報

透過 Spring 新聞簡報保持聯絡

訂閱

搶佔先機

VMware 提供培訓和認證,以加速您的進步。

瞭解更多

獲取支援

Tanzu Spring 在一個簡單的訂閱中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案。

瞭解更多

即將舉行的活動

檢視 Spring 社群中所有即將舉行的活動。

檢視全部