在測試環境安裝btrace,可以用于排查接口調用的時間,分析測試點的瓶頸。以下簡單介紹安裝和使用。
1. 安裝:btrace是一個開源代碼軟件,下載安裝的地址在:http://kenai.com/projects/btrace/downloads/directory/releases/release-1.2.1,下載得到tar.gz包,在應用服務器上使用sudo–u admin –H rz命令上傳tar.gz包,如果使用該命令時傳輸失敗,比如傳輸不完全等,則使用sudo –u admin –H rz –be命令(為什么要用admin賬號的權限是因為我們啟動應用用的賬號都是admin,如果用root賬號創建的文件,admin賬號啟動的應用可能沒有權限訪問該文件)。上傳完成后解壓,tar zvxf xxx.tar.gz,解壓后會看到:bin、build、docs、samples等目錄,bin目錄下是windows的啟動bat腳本和linux啟動的shell腳本,build下面是btrace源碼打出來的jar包,docs目錄下是btrace的使用文檔,samples目錄下是一些btrace腳本的例子。安裝完成。如果要查看btrace的源代碼,需要先安裝版本控制工具Mercurial客戶端,btrace的源代碼使用Mercurial管理,地址在:http://mercurial.selenic.com/。下載時如果報如下錯誤:abort:hg.kenai.com certificate error: certificate is for kenai.com(configurehostfingerprint 9c:f6:c3:1f:14:bc:98:82:de:2a:5b:6e:d2:ce:61:5d:95:e1:65:a5 oruse --insecure to connect insecurely)。則可以改用hg clone--insecurehttps://hg.kenai.com/hg/btrace~hg命令來下載。
2. 使用:編寫btrace腳本,通常我們需要編寫的腳本是打點某個方法的調用時間,一個例子如下:

寫好了腳本之后,同樣用rz命令上傳到btrace/bin目錄下。執行之前需要知道當前需要監控的代碼所在java進程的進程id,可以使用sudo jps或者ps –ef| grep java兩個命令獲取,得到進程id后,執行:sudo –u admin –H sh btrace 9926 CTest.java,當應用執行com.taobao.department.web.module.control.BrandsellFloorList的execute方法并返回后,會打印出諸如“floor execute Time taken ms 100”的語句,從而能夠非常直觀得看到方法調用的時間,通過多幾個時間打點,我們很容易得能排查得出接口中調用時間比較長得異常代碼塊。
3. 想法:通過排查應用中接口代碼的調用時間分布來排查性能瓶頸是日常性能測試中最常用的方式,這種方式到目前為止經歷了幾種方式的演變:應用中日志打點,輸出時間---àBtrace腳本。相比于日志打點,btrace腳本有著明顯的優勢:動態、方便并且能給那些我們無法修改源代碼的第三方jar包增加打點,但是,我們始終還是要寫btrace腳本,如果有多個方法需要監控,腳本數量會比較大。使用btrace開發的原理,我們可以把動態時間打點以工具的形式提供出來。類似以下的功能:在工具上選擇遠程的進程,輸入進程中的接口名和方法名,選擇打點,然后得到該接口調用時間的實時曲線圖表,這看起來就美妙多了。