動態跟蹤Java代碼的執行狀況工具–BTrace

來源:互聯網
上載者:User

非常強烈的推薦下BTrace這個工具,用了後不得不說太強大了,BTrace簡單來說,就是能在不改動當前程式的情況下,運行時的去監控Java程式的執行狀況,例如可以做到記憶體狀況的監控、方法調用的監控等等,官方網站上有非常多詳細的例子,我不說太多,只在下面舉一個簡單的例子來說明它的作用,BTrace的User
Guide請見:http://kenai.com/projects/btrace/pages/UserGuide。
對於運行中的Java程式,尤其是出了問題的程式,會需要跟蹤其執行狀況,例如傳入的參數是什麼、執行了多少時間,返回的對象是什麼,拋出了什麼異常,傳統的做法只能是把程式改一遍,加上一堆log,一個例子來展示下用BTrace的情況下,怎麼來跟蹤一個方法的執行時間:
@BTrace public class MethodResponseTime {
    
    @TLS private static long startTime;
    
    @OnMethod(clazz="類名",method="方法名")
    public static void onCall(){
        println("enter this method");
        startTime=timeMillis();
    }
    
    @OnMethod(clazz="類名",method="方法名",location=@Location(Kind.RETURN))
    public static void onReturn(){
        println("method end!");
        println(strcat("Time taken ms",str(timeMillis()-startTime)));
    }
    
}


用btrace執行上面的代碼,就可以動態監控任意的目前啟動並執行Java程式中某類的某方法的執行時間,執行上面代碼的方式如下(jdk 6+):
btrace [pid] MethodResponseTime.class

還有例如擷取調用參數、調用者的對象執行個體以及傳回值等請參看User Guide。

btrace為了保持JVM啟動並執行安全性,因此做了很多的限制,例如不能拋出異常、修改傳入的參數的值、修改傳回值等,基本是一個唯讀動態分析代碼健全狀態的工具,但仍然是非常的有用,其實現機制是attach
api + asm +  instrumentation。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.