package com.madding.shared.btrace; 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.TLS; /** * 类MethodTimeUsage.java的实现描述: * 追踪运行时某个方法具体消耗的时间 * * @author madding.lip May 16, 2012 9:31:22 AM */ @BTrace public class TraceMethodTimeSpend { public final static String className = "com.***********.handler.NewNACHandler"; public final static String classMethod = "handle"; public final static String frp = "net.jradius.freeradius.FreeRadiusProcessor"; public final static String pr = "processRequest"; @TLS static long beginTime; @TLS static long frp_pr_time; @OnMethod(clazz = className, method = classMethod) public static void beginTrace() { beginTime = BTraceUtils.timeMillis(); } @OnMethod(clazz = className, method = classMethod, location = @Location(Kind.RETURN)) public static void endTrace() { BTraceUtils.println( BTraceUtils.strcat( BTraceUtils.strcat( BTraceUtils.strcat(className , BTraceUtils.strcat(".", BTraceUtils.strcat(classMethod ,": "))), BTraceUtils.str(BTraceUtils.timeMillis() - beginTime)), "ms")); } @OnMethod(clazz = frp, method = pr) public static void beginTrace_frp_pr() { frp_pr_time = BTraceUtils.timeMillis(); } @OnMethod(clazz = frp, method = pr, location = @Location(Kind.RETURN)) public static void endTrace_frp_pr() { BTraceUtils.println( BTraceUtils.strcat( BTraceUtils.strcat( BTraceUtils.strcat(frp , BTraceUtils.strcat(".", BTraceUtils.strcat(pr ,": "))), BTraceUtils.str(BTraceUtils.timeMillis() - frp_pr_time)), "ms")); } }2.并发越高,这种问题出现概率越高;
protected void processRequest(ListenerRequest listenerRequest) throws Exception { FreeRadiusRequest request = (FreeRadiusRequest) listenerRequest.getRequestEvent(); try { try { request.setApplicationContext(getApplicationContext()); request.setReturnValue(runPacketHandlers(request)); } catch (Throwable th) { request.setReturnValue(JRadiusServer.RLM_MODULE_FAIL); RadiusLog.error(">>> processRequest(): Error during processing RunPacketHandlers block", th); }该行代码:
request.setReturnValue(runPacketHandlers(request));会调用
protected int runPacketHandlers(JRadiusRequest request)作
public void lock() { synchronized (this) { //check whether we are locked, if so... enter wait() while (this.locked) { try { this.wait(); } catch (InterruptedException e) { Thread.yield(); } } this.locked = true; } } public void unlock() { synchronized (this) { //set unlocked, notify one this.locked = false; this.notify(); } }
jradius session lock引起的性能下降问题排查,布布扣,bubuko.com
jradius session lock引起的性能下降问题排查
原文:http://blog.csdn.net/madding/article/details/24354487