开源JVM Sampling Profiler
眾所周知 ,大多數(shù)現(xiàn)有的采樣Java Profiler都必須在安全的地方進行堆棧跟蹤收集。 諸如采樣探查器之類的探查器就是這種情況,它使用SUN / Oracle管理代理來收集其堆棧跟蹤。 這種方法的問題在于,由于不是程序中的每個點都不是安全點,因此會引入樣本偏差,還會引入JVM達到安全點所需時間的開銷。
不久前,杰里米·曼森(Jeremy Manson) 開源了一些概念驗證代碼,在該代碼中對AsyncGetCallTrace JVMPI方法進行了調(diào)用,從而避免了線程到達安全點以讀取其調(diào)用跟蹤的需要。 該代碼在后臺注冊了一個處理程序函數(shù),該函數(shù)在發(fā)生sigprof時被調(diào)用。 因此,它避免了其他采樣分析器遭受的許多分析器精度問題。 使用此方法的缺點是異步回調(diào)中的代碼對其具有可怕的限制,例如無法堆分配內(nèi)存。 概念證明代碼顯示出了很大的獨創(chuàng)性,但是作為概念證明,它缺少有用的功能,例如用戶界面或?qū)Σ榭闯绦蜻\行時正在更新的概要分析數(shù)據(jù)的支持。
我已經(jīng)完成了此代碼轉(zhuǎn)儲,并開始將其轉(zhuǎn)換為可用的開源項目。 該程序有兩個主要部分。 有一個小型的C ++ jvmti代理,它寫出一個日志文件來描述已附加到該應(yīng)用程序的配置文件。 然后,Java 8應(yīng)用程序可以基于此日志呈現(xiàn)/顯示配置文件。 讀寫代碼基于內(nèi)存映射文件,因此,如果要將日志文件移動到tmpfs文件系統(tǒng),它也可以用作共享內(nèi)存IPC系統(tǒng)。 我還添加了一個GUI,雖然不是一個很好的GUI,但這只是一個開始。
生成日志文件意味著可以離線或追溯分析配置文件。 例如,您可以從性能測試運行中轉(zhuǎn)出日志文件,然后如果發(fā)現(xiàn)生產(chǎn)中存在回歸,則可以查看歷史差異。 通過將當前堆棧跟蹤復制到無阻塞,多生產(chǎn)者,單使用者循環(huán)隊列中,此事件探查器可避免在異步回調(diào)中執(zhí)行的嚴格限制,該隊列預先分配了固定大小的內(nèi)存塊。 然后,另一個線程將這些堆棧跟蹤信息寫入日志文件中。 另一個線程還需要查找有關(guān)諸如方法名稱之類的有用信息,因為JVMTI調(diào)用查找方法名稱信息并不安全。
目前,該代碼庫尚未準備好投入生產(chǎn) -我不完全信任很多錯誤和大量C / C ++代碼。請記住,如果JVMTI代理中存在錯誤,則可能會出現(xiàn)段錯誤您的JVM。 您已被警告! 源代碼位于github上,并且已獲得Apache許可。 我將歡迎代碼貢獻者以及人們的任何反饋。 目前尚處于起步階段,但我堅信公開開放代碼有助于快速提高其質(zhì)量。
翻譯自: https://www.javacodegeeks.com/2014/03/an-open-source-jvm-sampling-profiler.html
總結(jié)
以上是生活随笔為你收集整理的开源JVM Sampling Profiler的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Java和JCEKS进行AES-25
- 下一篇: 苹果4怎么用电脑刷机(苹果四怎么刷机不用