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