在访问页面请求的时候,如果系统执行效率低,我们怎样才能定位到这些页面请求呢?
java 有一个十分有效的动态跟踪工具—btrace 网址:
比如希望定位我们的控制器代码哪些方法慢:
1.我们可以编写如下类:
package demo;
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; import static com.sun.btrace.BTraceUtils.*;@BTrace public class BtraceTest { @TLS private static long starttime;
@OnMethod(clazz="/com\\.hotent\\..*\\..*\\.controller\\..*/",method="/.+/",location=@Location(Kind.ENTRY)) public static void startExecute(){ starttime=timeMillis(); } @OnMethod(clazz="/com\\.hotent\\..*\\..*\\.controller\\..*/",method="/.+/",location=@Location(Kind.RETURN)) public static void endExecute(){ long timeCost=timeMillis()-starttime; print(strcat(strcat(name(probeClass()), "."), probeMethod())); print(strcat(",time taken:" , str(timeCost))); println("]"); } }
2.使用jps 查看应用服务器进程。
其中8512就是我们的tomcat进程。
3.将刚才的代码copy到 btrace 下载目录。
4.执行命令如下
btrace.bat -cp bulid 8512 demo/BtraceTest.java
5.执行效果如下:
访问页面控制台将会打印每个控制器方法的执行时间。