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