首先推薦一下【江南白衣】大神對BTrace的文章Btrace入門到熟練小工完全指南。而且在看本篇文章之前最好先看一下這篇文章,不然效果不是很好。
1.如何在Linux下安裝Btrace并使用
1.1 安裝Btrace
1.下載安裝包[下載地址](https://github.com/btraceio/btrace/releases/download/v1.3.8.3-1/btrace-bin-1.3.8.3.tgz)
2.解壓 tar -xvf btrace-bin-1.3.8.3.tgz
3.導出環(huán)境變量
export BTRACE_HOME=/home/blues/btrace
export PATH=$PATH:$BTRACE_HOME/bin
1.2 編寫B(tài)TraceDemo
- 準備測試程序
import java.util.Random;
public class BTraceDemo {
public static void main(String[] args) {
Calculator calculator = new Calculator();
Random random = new Random();
while (true) {
System.out.println(calculator.add(random.nextInt(10), random.nextInt(10)));
}
}
}
public class Calculator {
private int c = 1;
public int add(int a, int b) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return a + b;
}
}
我們將測試程序放在btrace_test_demo目錄下,然后編譯,運行
root@develop ]# cd btrace_test_demo/
[root@develop btrace_test_demo]# javac BTraceDemo.java
[root@develop btrace_test_demo]# java BTraceDemo
16
8
17
- 獲取程序的pid
[root@develop btrace_test_demo]# jps
3642 Bootstrap
32752 BTraceDemo
- 將Btrace腳本綁定到應用程序中
[root@develop bin]# ./btrace 32752 ../../btrace_script/BTraceTest.java
trace1:a=3,b=9,sum=12
OK,這樣就算將Btrace的腳本嵌入到我們的應用程序中了。具體的腳本的語法和用法可以參考大神江南白衣的博客
2.怎樣才能方便快捷無誤地寫出BTrace腳本呢
2.1 使用VisualVm來寫
如果你使用VisualVm的話,那么也可以使用VisualVm來編寫B(tài)Trace腳本。不過需要你安裝btrace的插件。在VisualVm中安裝插件異常的爽,只需要在插件列表中點擊一下就可以了。
如下圖(由于我已經(jīng)安裝過了,所以不再【可用插件】列表中,在【已安裝】列表中)


安裝好BTrace插件之后就可以使用VIsualVm來打開一個java應用程序了。如下打開BTrace腳本的編寫界面


在這里面編寫B(tài)Trace腳本其實和在記事本上編寫腳本差不多。哪為啥要在這寫呢?
- 添加classpath比較方便
- 將腳本綁定到應用程序方便
所以如果是單純地為了寫出正確的腳本的話,在這里寫是不合適的。下面介紹第二種方式。
2.2 使用eclipse來寫B(tài)Trace腳本
對于一般的程序員而言,使用記事本來寫程序不僅效率低下,而且極其容器出錯。所以偉大的IDE就誕生了。主流的Java語言的IED有eclipse,idea等。所以如果能在IDE下來寫B(tài)trace的腳本的話,出錯的可能性就很低了。
下面就來介紹一下怎么使用eclipse來寫B(tài)trace腳本。
首先我們來看一下BTrace下載的目錄的結(jié)構(gòu)。順便提供一下我使用的Btrace版本的下載地址

在【build】下有一個btrace-client.jar的jar包,我們可以將該jar包加到我們的eclipse中來編寫,這樣我們就可以使用eclipse的提示功能和自動編譯的功能了。這樣也就不至于交給運維的腳本是有編譯和語法問題的。


總結(jié):寫腳本一定要在eclispse下編寫,保證語法無誤。但是如果只是需要在本機運行BTrace的話,那么就可以使用VisualVm的BTrace插件了。但是如果要是在linux下來運行的話,那還是得用命令行來運行。