Collus

          惜秦懷古

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            0 Posts :: 6 Stories :: 0 Comments :: 0 Trackbacks
          非常強烈的推薦下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。
          posted on 2010-05-13 13:00 良帥 閱讀(414) 評論(0)  編輯  收藏 所屬分類: JAVA
          主站蜘蛛池模板: 黔西| 海城市| 梨树县| 张家口市| 黄龙县| 凤山县| 宁德市| 山西省| 大连市| 罗田县| 溧水县| 林芝县| 松溪县| 巴南区| 沁水县| 陆川县| 涞水县| 轮台县| 辛集市| 嘉义县| 安达市| 北票市| 娄烦县| 手游| 策勒县| 阿城市| 锡林郭勒盟| 高州市| 岱山县| 额尔古纳市| 岳普湖县| 蒲城县| 绥阳县| 邹平县| 大同市| 进贤县| 朝阳区| 铁力市| 陆良县| 阳原县| 江孜县|