日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
線上排查問(wèn)題的利器——Btrace

之前 Btrace 只是聽(tīng)說(shuō)過(guò),但還沒(méi)有具體的用到。最近在排查線上問(wèn)題的時(shí)候,使用了 Btrace ,發(fā)現(xiàn) Btrace 真是在關(guān)鍵時(shí)候的利器。

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

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

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

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

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

如何使用 Btrace

基本用法: trace

其中, btrace 是在 btrace 下載包中的命令 , pid 是 JVM 的進(jìn)程 id , btrace-script 是編寫(xiě)的 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 都是寫(xiě)在某個(gè)類的靜態(tài)方法中的,這個(gè)靜態(tài)方法,就是 action method 。

Btrace 中的一些限制:

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

不能新建對(duì)象

不能拋異常

不能 catch 異常

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

不能有循環(huán)

不能有斷言

……

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

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

其中:

其中類名需要加上 @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 表示事件(通過(guò)時(shí)間)觸發(fā)的 probe point ,每隔 2 秒觸發(fā)一次

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

支持的跟蹤類型

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

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

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

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

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

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

Btrace 的 User Guide

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

關(guān)于 Btrace 的原理

詳情可見(jiàn): http://victorzhzh.javaeye.com/blog/965789

什么時(shí)候用 Btrace

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

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

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

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

以上就是本人剛開(kāi)始使用 Btrace 的一些成果,希望能對(duì)大家排查問(wèn)題帶來(lái)一些作用 。


網(wǎng)站欄目:線上排查問(wèn)題的利器——Btrace
URL標(biāo)題:http://www.5511xx.com/article/djcdggg.html