使用 Yourkit 尋找記憶體洩漏

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

今天使用 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 社群中所有即將舉辦的活動。

查看全部