BTrace for Java應用程序簡介

本文的目的是學習如何使用BTrace動態跟蹤/觀察正在運行的Java應用程序(JDK 6+),而無需更改應用程序的代碼和配置參數。

什么是BTrace?

BTrace是一個開源項目,始于2007年,最初由A.Sundararajan和K.Balasubramanian兩人擁有。 由于Java One 2008會議,它獲得了名聲。

BTrace幫助我們查明應用程序中的復雜代碼問題。 使用BTrace可以解決的問題包括代碼錯誤,不可預測的流程,并發問題和在特定的且通常難以重現的情況下發生的性能問題。

BTrace以程序員定義的方式動態地(無需重新啟動應用程序)檢測(更改)應用程序的字節碼。 工具的目的是查看在代碼的特定區域中發生的情況。 如果超出此范圍使用,則可能會損害應用程序的流程,因此驗證程序禁止該操作。
例如,讓我們嘗試解決以下問題–重要文件每天偶爾被刪除一次。 我們想要找到執行此操作的代碼。 因此,我們想更改java.io.File的'delete'方法并在文件名合適的情況下打印調用線程的堆棧跟蹤。 使用BTrace,我們可以通過編寫簡短的Java代碼來做到這一點。

以下架構顯示BTrace工作原理。

在Tar??get JVM中,有一個動態插入的BTrace代理(使用attach API )。 BTrace客戶端(BTrace命令行或具有BTrace插件的Visual VM)將命令發送到代理并獲取響應。 BTrace代理會檢測正在加載到目標JVM中的類,并重新加載已經加載的類。

編寫跟蹤腳本

編寫BTrace腳本非常簡單明了,其概念類似于面向方面的編程概念。

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);
}

每個BTrace腳本均由探針(Aspects lang語中的切入點)和操作(建議)組成。 探針定義何時應執行檢測。 動作定義了檢測。
探針可以包括以下內容:

  • 方法進入/退出
  • 電話號碼
  • 字段已更新/已訪問
  • 方法調用/返回(在指定方法內)
  • 異常拋出(之前)
  • 同步進入/退出
  • 計時器
  • 構造器入口

BTrace的能力和局限性

能力

  • 動態連接到任何Java6 +應用程序并運行any(*)代碼

局限性

  • 出于安全考慮,必須與運行跟蹤應用程序的用戶使用同一用戶運行
  • 僅支持Hotspot JVM
  • 與目標應用程序分開編譯–不熟悉應用程序類
  • 可能會破壞目標應用程序–我在壽命很長的設置上運行了BTrace,該設置包含很多跟蹤腳本。 目標應用程序甚至沒有崩潰過。

先進的BTrace

BTrace社區實際上由一個定期在項目上工作的開發人員組成。 因此,不要期望在接下來的版本中有太多的改進和許多新功能。 (這是一個為項目做出貢獻的好機會,因為每個開發人員都會顯著增強開發水平)。

該項目的文檔應該得到顯著改進–我發現自己在將這個框架集成到我現有的框架中時曾多次猜測。 BTrace論壇是獲取有關框架答案的好方法。

為了理解BTrace的魔力是如何工作的,需要三個領域的知識-“ Java代理開發”,“ java中的字節碼操作”和“ Java附加api”。 將來我可能會寫一些這些領域。

相關鏈接

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372332.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372332.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372332.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

叢銘俁 160809324 (作業1)

老師,助教好!我是計科3班的叢銘俁,我的性格陽光開朗,待人大方友善,凡事不喜歡斤斤計較;本人熱心,喜歡樂于助人,也喜歡和積極向上的人交朋友。最喜歡打羽毛球,其次是籃球&…

mysql死鎖分析_MySQL死鎖分析

熟悉或者了解數據庫的朋友都知道鎖的概念,這里不做過多的解析!鎖的種類有很多,不同數據庫的鎖管理方式也不同。這里主要談下MySQL innodb引擎下的死鎖。死鎖通俗的來講就是2個事務相互請求對方持有的鎖,這樣就會造成2個事務相互等…

在Akka中實現主從/網格計算模式

主從模式是容錯和并行計算的主要示例。 模式背后的想法是將工作劃分為相同的子任務,然后將其委派給從屬。 這些從節點或實例將處理工作任務,并將結果發送回主節點。 然后主節點將編譯從所有從節點接收到的結果。關鍵是從節點僅知道如何處理任務&#xff…

java學習筆記總略

二、正文(一)Java1.接口和抽象類的區別①抽象類里可以有構造方法,而接口內不能有構造方法。②抽象類中可以有普通成員變量,而接口中不能有普通成員變量。③抽象類中可以包含非抽象的普通方法,而接口中所有的方法必須是…

react實現路由跳轉_react實現hash路由

眾所周知,目前單頁面使用的路由有兩種實現方式:hash 模式history 模式hash 模式路由原理:我們先來看hash模式,頁面首次加載時需要在load事件中解析初始的URL,從而展示進入的頁面。當 # 后面的哈希值發生變化時&#xf…

Java中的Google協議緩沖區

總覽 協議緩沖區是一種用于結構化數據的開源編碼機制。 它是由Google開發的,旨在實現語言/平臺中立且可擴展。 在本文中,我的目的是介紹Java平臺上下文中協議緩沖區的基本用法。 Protobuff比XML更快,更簡單,并且比JSON更緊湊。 當…

匈牙利哦模板 二分匹配 完全匹配問題

匈牙利算法的核心思想就是 騰空間, 有條件 創造,沒條件也要創造! bool find(int x){int i,j;for (j1;j<m;j){ //掃描每個被匹配的人 if (line[x][j]true && used[j]false) //如果有關系并且還沒有標記過(這里標記的意思是這次查找曾試圖改變過的歸屬問題&a…

ThinkPHP 中驗證碼的看不清切換

<!--HTML頁面--> <!DOCTYPE html><html><head> <title></title></head><body><script type"text/javascript" src"__PUBLIC__/js/jquery-1.8.2.min.js"></script><form action"{:U(H…

mysql從表截取信息_mysql中循環截取用戶信息并插入到目標表對應的字段中

操作環境&#xff1a;有表game_list&#xff0c;字段&#xff1a;uid&#xff0c;score1&#xff0c;score2&#xff0c;seat_id&#xff0c;last_update&#xff1b;傳入參數為i_player_detail &#xff0c;傳入的值為多個用戶的id、之前分數、之后分數、座位號&#xff0c;每…

Java中的數組,列表,集合,映射,元組,記錄文字

有時&#xff0c;當我對JavaScript的強大功能和表現力感到興奮時&#xff0c;我發現自己錯過了Java世界中的一兩個功能。 除了lambda表達式/閉包或任何您想稱為“匿名函數”的東西之外&#xff0c;它還對數組&#xff0c;數組&#xff0c;列表&#xff0c;集合&#xff0c;映射…

mysql鎖表問題的解決方法_MYSQL鎖表問題的解決方法

本文實例講述了MYSQL鎖表問題的解決方法。分享給大家供大家參考&#xff0c;具體如下&#xff1a;很多時候&#xff01;一不小心就鎖表&#xff01;這里講解決鎖表終極方法&#xff01;案例一mysql>show processlist;參看sql語句一般少的話mysql>kill thread_id;就可以解…

linux——(1)初識linux

linux有窗口管理員環境和純文本界面環境&#xff0c;同時linux默認提供6個Terminal來讓用戶登錄。crtlaltF1-6可自由切換。其中如果窗口管理員環境處于運行狀態&#xff0c;那么可以按crtlaltF7直接切過去。 常用命令&#xff1a; cd [dir] #進入dir目錄下 ls #列出當前目錄下的…

4.26學習成果

哇&#xff0c;今天終于開始接觸Web了&#xff0c;感覺有點小興奮&#xff0c;這幾天看來那個視頻感覺挺有趣的&#xff0c;挺奇妙的。看到人家敲代碼&#xff0c;感覺好厲害。但是感覺不懂&#xff0c;所以&#xff0c;要努力學習了。 今天的學習成果&#xff1a; 網頁由什么組…

將Glassfish 3連接到外部ActiveMQ 5代理

介紹 在ONVZ&#xff0c;我們將Glassfish 3用作開發和生產應用服務器&#xff0c;我們對其性能和穩定性以及周圍的廣大社區感到非常滿意。 我很少遇到在stackoverflow或java.net上沒有匹配解決方案的問題。 作為我們開源策略的一部分&#xff0c;我們還運行了一個定制的ActiveM…

esp8266 lcd 天氣_ESP8266 顯示實時天氣信息

代碼文件getdata.h#include #include #include #include #include #include #include #define DEBUG 1#define MAX_CONTENT_SIZE 2000const char* ssid "weather";const char* password "mymymymy";WiFiClient client;HTTPClient http;char response[MAX…

【VS開發】visual studio 2015的NuGet Manager解決方案管理功能

NuGet的官方說明是&#xff1a;NuGet是一款Visual Studio的擴展&#xff0c;它可以簡單的安裝、升級開源庫和工具。 官網地址&#xff1a;http://www.nuget.org/ 官網最醒目的位置就是下載鏈接&#xff0c;安裝完成后我們來快速體驗一把。 手上有個小項目需要使用到json格式&am…

五. 面向對象高級特性4. 接口的概念和使用

在抽象類中&#xff0c;可以包含一個或多個抽象方法&#xff1b;但在接口(interface)中&#xff0c;所有的方法必須都是抽象的&#xff0c;不能有方法體&#xff0c;它比抽象類更加“抽象”。接口使用 interface 關鍵字來聲明&#xff0c;可以看做是一種特殊的抽象類&#xff0…

智能配料

我們都有多少次聽說“分批處理”會增加延遲&#xff1f; 作為對低延遲系統充滿熱情的人&#xff0c;這讓我感到驚訝。 以我的經驗&#xff0c;正確完成批處理不僅可以提高吞吐量&#xff0c;還可以減少平均延遲并保持一致。 那么&#xff0c;批處理如何神奇地減少延遲呢&#x…

mysql從myisam_將MySQL從MyISAM轉換成InnoDB錯誤和解決辦法

原來自己用的是為了裝的&#xff0c; 所以在設置database usage(如下圖1)的時候按照discuz官方的建議&#xff0c;選的都是Non-Transactional Database Only(只支持MyISAM數據引擎的非事務數據庫)&#xff0c;用MyISAM數據庫&#xff0c;還沒涉及到需要InnoDB&#xff0c;因此打…

相似性度量中用到的一些距離函數

本文目錄 1. 歐氏距離 2. 曼哈頓距離 3. 切比雪夫距離 4. 閔可夫斯基距離 5. 標準化歐氏距離 6. 馬氏距離 7. 漢明距離 8. 杰卡德距離 & 杰卡德相似系數 9. 相關系數 & 相關距離 10. 信息熵 1. 歐氏距離(Euclidean Distance) 歐氏距離是最易于理解的一種距離計算方法&a…