首页 > 数据库技术 > 详细

BTrace跟踪DBCP泄漏脚本

时间:2014-12-17 02:02:39      阅读:386      评论:0      收藏:0      [点我收藏+]

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;
@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)));
  BTraceUtils.put(map, conn, BTraceUtils.jstackStr());
 }
 
 
 @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);
 }
 
 
}

BTrace跟踪DBCP泄漏脚本

原文:http://www.blogjava.net/chen4765654/archive/2014/12/16/421472.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!