溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

線上排查問題的利器Btrace怎么用

發(fā)布時(shí)間:2021-12-27 14:05:01 來源:億速云 閱讀:162 作者:小新 欄目:編程語言

這篇文章主要介紹了線上排查問題的利器Btrace怎么用,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

Btrace 是一個(gè)安全,可以動(dòng)態(tài)跟蹤 java 程序的一種工具。

他的操作不會(huì)對原有 java 進(jìn)程產(chǎn)生影響,不用關(guān)閉正在運(yùn)行的 java 進(jìn)程,也不會(huì)修改 java 進(jìn)程中的邏輯和數(shù)據(jù)。

因此,也就成為我們線上跟蹤生產(chǎn)代碼的有力工具!

Btrace 的腳本編寫也非常簡單:和寫 Java 代碼一樣的,因此對于我們,學(xué)習(xí)的曲線幾乎是平坦的。

下面就分享一下 Btrace 的一些用法:

如何使用 Btrace

基本用法: trace

其中, btrace 是在 btrace 下載包中的命令 , pid 是 JVM 的進(jìn)程 id , btrace-script 是編寫的 btrace 腳本。

Btrace 中的一些概念

Probe Point : 關(guān)注點(diǎn)。就是我們要關(guān)注應(yīng)用程序中要執(zhí)行的“地方”,或者是一些“事件”的發(fā)生。

Trace Action : 就是觸發(fā)了 probe point 的時(shí)候,我們所要執(zhí)行的動(dòng)作。

Action Methods :我們的 trace action 都是寫在某個(gè)類的靜態(tài)方法中的,這個(gè)靜態(tài)方法,就是 action method 。

Btrace 中的一些限制:

Btrace 的初衷是要“跟蹤代碼”,而不是修改代碼,因此他要保證我們注入的腳本,是安全的,對應(yīng)用程序來說是“只讀”的。也就是說不能修改應(yīng)用程序的代碼或者數(shù)據(jù)。因此 Btrace 中有一些限制,主要有:

不能新建對象

不能拋異常

不能 catch 異常

不能調(diào)用實(shí)例方法和靜態(tài)方法。只能調(diào)用 Btrace 提供的 com.sun.btrace.BTraceUtils 中的方法和自己在腳本中定義的方法。

不能有循環(huán)

不能有斷言

……

初看起來,好像限制蠻多的。不過, com.sun.btrace.BTraceUtils 提供的方法很多,足夠我們來“跟蹤”代碼了。而且,這些限制也是必要的,因?yàn)槲覀冎皇堑侥莻€(gè) JVM 去看看,看看而已。

一個(gè)簡單的 Btrace 腳本例子,其實(shí)就是 Java 代碼

線上排查問題的利器Btrace怎么用

其中:

其中類名需要加上 @Btrace 的注釋,以表示是 Btrace 腳本

OnMethod 表示一個(gè) probe point ,這個(gè)就表示當(dāng)執(zhí)行到 java.awt.Component 這個(gè)類的方法(這個(gè)是 Component 的構(gòu)建方法)時(shí),就觸發(fā) func 方法。

@Self 表示這個(gè)被實(shí)例化的 Component 的引用

@OnTimer 表示事件(通過時(shí)間)觸發(fā)的 probe point ,每隔 2 秒觸發(fā)一次

相信程序不用做過多解釋,大家都知道,終端將會(huì)打印出從跟蹤開始, Component 被實(shí)例化的個(gè)數(shù)。

支持的跟蹤類型

Btrace 支持的跟蹤類型有很多了,包括可以跟蹤:

跟蹤到某個(gè)實(shí)例方法的觸發(fā)

跟蹤到某個(gè)接口方法的觸發(fā)

跟蹤到觸發(fā)方法的參數(shù),返回值

可以將當(dāng)前觸發(fā)的線程堆棧打印出來

設(shè)置還可以跟蹤某個(gè)方法中的哪一行代碼被執(zhí)行到

Btrace 的 User Guide

http://kenai.com/projects/btrace/pages/UserGuide

什么時(shí)候用 Btrace

雖然 Btrace 在關(guān)鍵時(shí)候能起到迅速排查問題的作用,但我個(gè)人感覺,這還是不到萬不得已才使用的好。

首先,我們代碼上線前,應(yīng)該充分 review ,充分和相關(guān)方進(jìn)行溝通,以避免不必要的問題發(fā)生。

其次,我們應(yīng)該養(yǎng)成記 log 的良好習(xí)慣。遇到問題,如果有相關(guān)日志可以排查,是最方便的,同時(shí),也是最安全,成本***的一種排查方法。

***,我們可以結(jié)合 btrace 和 jdk 自帶的 tool 來排查問題,比如 jstack , jstat 等等,快速的定位問題。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“線上排查問題的利器Btrace怎么用”這篇文章對大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI