BTrace is a helpful tool that lets you run Java-like scripts on top of a live JVM to capture or aggregate any form of variable state without restarting the JVM or deploying new code. This enables you to do pretty powerful things like printing the stack traces of threads, writing to a specific file, or printing the number of items of any queue or connection pool and many more.
lets trace a simple java application to know how much time a method took to complete at runtime without modifying a code.
Installation:
BTrace require a tracing script which has annotated action about what to trace and can add additional capabilities.this is the user guide to know about the different annotations and what they signifies.we have a following tracing script which will trace the execute method and print its execution time. to compile this script you need to have brace-tool.jar in the class path.
now it time to trace the already running java application, to know the process id of the application use jps command which will fetch you the process id.attach btrace to process id as follows and it will start tracing the application
lets trace a simple java application to know how much time a method took to complete at runtime without modifying a code.
Installation:
-Download latest version of BTrace from https://kenai.com/projects/btrace/downloads/directory/releases and unzip it some location. -Add the env variable as follows export BTRACE_HOME=/root/btrace-bin PATH=$PATH:$BTRACE_HOME/binThis is the sample code which I want to trace
package com.rajkrrsingh.trace.test; public class BtraceTest { public void execute (int i) { System.out.println ("executing "+i+" time"); try { Thread.sleep (Math.abs (( int ) (Math.random () * 1000 ))); } catch (InterruptedException e) { e.printStackTrace (); } } public void doExcute () { int i=0; while ( true ) { execute (i); i++; } } public static void main (String [] args) { BtraceTest btraceTest = new BtraceTest (); btraceTest.doExcute (); } }
BTrace require a tracing script which has annotated action about what to trace and can add additional capabilities.this is the user guide to know about the different annotations and what they signifies.we have a following tracing script which will trace the execute method and print its execution time. to compile this script you need to have brace-tool.jar in the class path.
package com.rajkrrsingh.trace.test; import com.sun.btrace.annotations.BTrace; import static com.sun.btrace.BTraceUtils.jstack; 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 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; @BTrace public class TraceMethodTime { @TLS static Long beginTime; @OnMethod(clazz="com.rajkrrsingh.trace.test.BtraceTest", method="execute") public static void traceExecuteBegin() { println("method Start!"); beginTime = timeMillis(); } @OnMethod(clazz="com.rajkrrsingh.trace.test.BtraceTest", method="execute", location=@Location(Kind.RETURN)) public static void traceExcute() { println(strcat(strcat("btrace.test.MyBtraceTest.execute time is: ", str(timeMillis() - beginTime)), "ms")); println("method End!"); jstack(); } }
now it time to trace the already running java application, to know the process id of the application use jps command which will fetch you the process id.attach btrace to process id as follows and it will start tracing the application
btrace process-id script-location btrace 22618 com/rajkrrsingh/trace/test/TraceMethodTime.javaBtrace will attach to the running jam and you will see the following output on the console.
method Start! btrace.test.MyBtraceTest.execute time is: 323ms method End! com.rajkrrsingh.trace.test.BtraceTest.execute(BtraceTest.java:12) com.rajkrrsingh.trace.test.BtraceTest.doExcute(BtraceTest.java:18) com.rajkrrsingh.trace.test.BtraceTest.main(BtraceTest.java:25) method Start! btrace.test.MyBtraceTest.execute time is: 655ms method End! com.rajkrrsingh.trace.test.BtraceTest.execute(BtraceTest.java:12) com.rajkrrsingh.trace.test.BtraceTest.doExcute(BtraceTest.java:18) com.rajkrrsingh.trace.test.BtraceTest.main(BtraceTest.java:25)