chen4765654

          BTrace跟蹤DBCP泄漏腳本

          import static com.sun.btrace.BTraceUtils.println;
          import static com.sun.btrace.BTraceUtils.str;
          import static com.sun.btrace.BTraceUtils.strcat;
          import static com.sun.btrace.BTraceUtils.timeMillis;
          import java.sql.Connection;
          import java.util.HashMap;
          import java.util.Map;
          import com.sun.btrace.BTraceUtils;
          import com.sun.btrace.annotations.BTrace;
          import com.sun.btrace.annotations.Kind;
          import com.sun.btrace.annotations.Location;
          import com.sun.btrace.annotations.OnMethod;
          import com.sun.btrace.annotations.ProbeClassName;
          import com.sun.btrace.annotations.ProbeMethodName;
          import com.sun.btrace.annotations.Return;
          import com.sun.btrace.annotations.OnEvent;
          import com.sun.btrace.annotations.Self;
          import com.sun.btrace.annotations.TLS;
          import java.lang.Appendable;
          @BTrace public class DataSourceTrace {
           private static Map map = BTraceUtils.newHashMap();
           
           @OnMethod(clazz = "org.apache.commons.dbcp.BasicDataSource", method = "getConnection", location = @Location(Kind.RETURN))
           public static void traceExecute(@ProbeClassName String name,@ProbeMethodName String method, @Return Connection conn) {
            //BTraceUtils.println(strcat("獲取連接:",BTraceUtils.str(conn)));
            Appendable buffer=BTraceUtils.Strings.newStringBuilder();
            BTraceUtils.Strings.append(buffer,BTraceUtils.timestamp("yyyy-MM-dd HH:mm:ss"));
            BTraceUtils.Strings.append(buffer," - ");
            BTraceUtils.Strings.append(buffer,BTraceUtils.jstackStr());
            BTraceUtils.put(map, conn,str(buffer));
           }
           
           
           @OnMethod(clazz = "org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper", method = "close")
           public static void traceExecute2(@ProbeClassName String name,@ProbeMethodName String method, @Self Connection conn) {
            //BTraceUtils.println(strcat("釋放連接:",BTraceUtils.str(conn)));
            BTraceUtils.remove(map, conn);
           }
           
           @OnEvent
           public static void exit(){  
            //這里打印泄漏連接的方法堆棧,運行一段時間后通過Ctrl+C,選擇2,發送事件打印
            BTraceUtils.printMap(map);
           }
           
           
          }

          posted on 2014-12-16 16:20 紫色心情 閱讀(547) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 绵竹市| 马山县| 安福县| 邵东县| 慈利县| 专栏| 娄底市| 和田市| 磴口县| 横峰县| 宁明县| 高要市| 德阳市| 加查县| 甘孜| 山阳县| 宜君县| 贞丰县| 兰州市| 泸水县| 赤水市| 宁津县| 安平县| 贞丰县| 涡阳县| 元谋县| 德化县| 宁武县| 禄丰县| 多伦县| 长垣县| 东城区| 建宁县| 绥江县| 长治市| 铅山县| 新密市| 老河口市| 那曲县| 塔城市| 汾阳市|