領先一步
VMware 提供培訓和認證,助您加速進步。
瞭解更多我今天在使用 Yourkit 時獲得了非常棒的體驗,因此我想寫一篇快速的推薦。自從我上次認真使用它以來已經有幾年了,即使在那時它也是我能找到的最好的工具,但現在它確實超級流暢。我沒有對市場進行詳盡的調查,那也不是本次練習的目的:我只想用一個工具來解決問題。
這是我一天故事的記錄;起初是沮喪,然後是惱火,最後是滿意。我懷疑 Spring Batch 中存在記憶體洩漏,並且需要儘快找到它。這背後的故事是,我見過很多記憶體洩漏,但已經很久沒有親自處理過了。現在我生活在 STS 中(有時甚至在其中做夢),所以我需要一個在 IDE 中執行良好的工具。我嘗試了兩個工具,但只是因為第一個選擇不起作用。我嘗試的兩個工具是 TPTP 和 Yourkit。
我用 JUnit 編寫了一個簡單的整合測試,並使用這兩個工具對其進行了效能分析。透過其中任何一個工具的記憶體分析,我都能看出我的程序結束時堆中有太多 JobExecution 型別的物件,我當時只需要知道是誰在持有它們不該有的引用?這似乎是一個足夠簡單的問題。
由於 Eclipse 是 STS 的核心,我想看看 Eclipse 的效能監控工具 (TPTP) 是否比我上次嘗試時有所改進。經過半天的折騰,簡短的回答是“沒有”。冗長的解釋是,它在不安裝晦澀的過時共享庫(在 Ubuntu Ibex 上)的情況下根本無法執行,即使運行了,記憶體分析中的資訊也少得可憐,無法追蹤記憶體洩漏。Google 可以幫助你解決第一個問題(我不知道為什麼 TPTP 在這方面文件如此糟糕),但無法解決第二個問題。我能從 TPTP 中獲取足夠的資訊來看到存在洩漏,但我仍然不知道它來自哪裡。問題是,報告只告訴你堆中的物件以及分配它們的原始程式碼行,這對於知道程序結束時誰持有對它們的引用來說太遙遠了。結論:TPTP 比幾年前有了巨大的進步,但從實際應用角度來看仍然 pretty useless。
於是我轉向了 Yourkit,我知道它可以輕鬆解決這個問題,但對安裝和工具卻有些擔憂。我發現 Eclipse 工具現在非常棒(我上次看的時候還沒有),而且更好的是,我在大約 5 分鐘的工作後找到了記憶體洩漏的根源。不算差。如果你想知道它的殺手級功能,那就是:能夠瀏覽堆和所有物件引用。此外,當程序結束時自動採取快照也很有幫助,因此你可以編寫一個簡單的單元測試,從 IDE 中對其進行效能分析,然後只需點選幾下即可將堆載入到 Yourkit UI 中。
如果你好奇的話,Spring Batch 的問題很小(並且隻影響了快照版本),而且很容易修復。
我知道 Mark、Filip 和 SpringSource 的其他同事也在使用 Yourkit(例如,參見這篇博文),而且我問過的每個人都很喜歡它。但是,如果我們將其提及在文章和諮詢案例中,它往往會被淹沒在大量其他內容中,所以我希望這篇小文章能讓 Yourkit 躍升到你的優先關注列表。
免責宣告:我對 Yourkit 沒有個人或商業利益。