BTrace for Java应用程序简介
什么是BTrace?
BTrace是一個(gè)開源項(xiàng)目,始于2007年,最初由A.Sundararajan和K.Balasubramanian兩人擁有。 由于Java One 2008會議,它獲得了名聲。
BTrace幫助我們查明應(yīng)用程序中的復(fù)雜代碼問題。 使用BTrace可以解決的問題包括代碼錯(cuò)誤,不可預(yù)測的流程,并發(fā)問題和在特定的且通常難以重現(xiàn)的情況下發(fā)生的性能問題。
BTrace以程序員定義的方式動態(tài)地(無需重新啟動應(yīng)用程序)檢測(更改)應(yīng)用程序的字節(jié)碼。 工具的目的是查看在代碼的特定區(qū)域中發(fā)生的情況。 如果超出此范圍使用,則可能會損害應(yīng)用程序的流程,因此驗(yàn)證程序禁止該操作。
例如,讓我們嘗試解決以下問題–重要文件每天偶爾被刪除一次。 我們想要找到執(zhí)行此操作的代碼。 因此,我們想更改java.io.File的'delete'方法并在文件名合適的情況下打印調(diào)用線程的堆棧跟蹤。 使用BTrace,我們可以通過編寫簡短的Java代碼來做到這一點(diǎn)。
以下架構(gòu)顯示BTrace工作原理。
在Tar??get JVM中,有一個(gè)動態(tài)插入的BTrace代理(使用attach API )。 BTrace客戶端(BTrace命令行或具有BTrace插件的Visual VM)將命令發(fā)送到代理并獲取響應(yīng)。 BTrace代理會檢測正在加載到目標(biāo)JVM中的類,并重新加載已經(jīng)加載的類。
編寫跟蹤腳本
編寫B(tài)Trace腳本非常簡單明了,其概念類似于面向方面的編程概念。
import com.sun.btrace.annotations.*; import com.sun.btrace.BTraceUtils;@BTrace public class HelloWorld {@OnMethod(clazz="java.io.File",method="") public static void onNewFileCreated(String fileName) {BTraceUtils.println("New file is being created");BTraceUtils.println(fileName); } 每個(gè)BTrace腳本均由探針(Aspects lang語中的切入點(diǎn))和操作(建議)組成。 探針定義何時(shí)應(yīng)執(zhí)行檢測。 動作定義了檢測。
探針可以包括以下內(nèi)容:
- 方法進(jìn)入/退出
- 電話號碼
- 字段已更新/已訪問
- 方法調(diào)用/返回(在指定方法內(nèi))
- 異常拋出(之前)
- 同步進(jìn)入/退出
- 計(jì)時(shí)器
- 構(gòu)造器入口
BTrace的能力和局限性
能力
- 動態(tài)連接到任何Java6 +應(yīng)用程序并運(yùn)行any(*)代碼
局限性
- 出于安全考慮,必須與運(yùn)行跟蹤應(yīng)用程序的用戶使用同一用戶運(yùn)行
- 僅支持Hotspot JVM
- 與目標(biāo)應(yīng)用程序分開編譯–不熟悉應(yīng)用程序類
- 可能會破壞目標(biāo)應(yīng)用程序–我在壽命很長的設(shè)置上運(yùn)行了BTrace,該設(shè)置包含很多跟蹤腳本。 目標(biāo)應(yīng)用程序甚至沒有崩潰過。
先進(jìn)的BTrace
BTrace社區(qū)實(shí)際上由一個(gè)定期在項(xiàng)目上工作的開發(fā)人員組成。 因此,不要期望在接下來的版本中有太多的改進(jìn)和許多新功能。 (這是一個(gè)為項(xiàng)目做出貢獻(xiàn)的好機(jī)會,因?yàn)槊總€(gè)開發(fā)人員都會顯著增強(qiáng)開發(fā)水平)。
該項(xiàng)目的文檔應(yīng)該得到顯著改進(jìn)–我發(fā)現(xiàn)自己在將這個(gè)框架集成到我現(xiàn)有的框架中時(shí)曾多次猜測。 BTrace論壇是獲取有關(guān)框架答案的好方法。
為了理解BTrace的魔力是如何工作的,需要三個(gè)領(lǐng)域的知識-“ Java代理開發(fā)”,“ java中的字節(jié)碼操作”和“ Java附加api”。 將來我可能會寫一些這些領(lǐng)域。
相關(guān)鏈接
http://www.parleys.com/#st=5&id=1618&sl=1
http://kenai.com/projects/btrace
參考: The Art of Java博客的JCG合作伙伴 Art Gourevitch 對BTrace的介紹 。
翻譯自: https://www.javacodegeeks.com/2012/06/introduction-to-btrace-for-java.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的BTrace for Java应用程序简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java线程死锁–案例研究
- 下一篇: (linux的root密码)