Skip to content

Instantly share code, notes, and snippets.

@malys
Last active January 19, 2021 16:13
Show Gist options
  • Select an option

  • Save malys/dfd78b56c844190e147114adce389da7 to your computer and use it in GitHub Desktop.

Select an option

Save malys/dfd78b56c844190e147114adce389da7 to your computer and use it in GitHub Desktop.
[Btrace] dynamic trace #java #trace #btrace #wildfly #jbeap #jboss #measure

Compilation

BTRACE_HOME=D:\prog\btrace-bin\
mkdir btrace
cd btrace

# Compiling Btrace script
%BTRACE_HOME%\btracec.bat performance.java
# generate btrace/Performance.class

Intellij

For console output

-javaagent:$BTRACE_HOME/libs/btrace-agent.jar=scriptdir=$PWD/btrace,debug=true,stdout=true

For log file output

-javaagent:$BTRACE_HOME/libs/btrace-agent.jar=scriptdir=$PWD/btrace,debug=false,stdout=false,scriptOutputFile=d:/tmp/btrace.log

For unit tests

-javaagent:$BTRACE_HOME/libs/btrace-agent.jarr=scriptdir=$PWD/btrace,debug=false,stdout=true

Wildfly

Put btrace script folder in JBEAP folder.

JBEAP_PATH=/d/7.1.6
EAP7_WILDFLY_ROOT_DIR=$JBEAP_PATH/modules
WILDFLY_MODULEPATH=${EAP7_WILDFLY_ROOT_DIR}/modules
LOG_MANAGER_VERSION=$(find $JBEAP_PATH/modules/system/layers/base/ -name jboss-logmanager*.jar -printf "%T@ %Tc %p\n" | sort -n | tail -n1 ) 
LOG4J_MANAGER=$(find $JBEAP_PATH/modules/system/layers/base/ -name log4j-jboss-logmanager*.jar -printf "%T@ %Tc %p\n" | sort -n | tail -n1) 
echo $LOG4J_MANAGER 
echo $LOG_MANAGER_VERSION
JAVA_TOOL_OPTIONS="-Dmodule.path=$WILDFLY_MODULEPATH -Xbootclasspath/p:$JBEAP_PATH/jboss-modules.jar  -Djboss.modules.system.pkgs=org.jboss.logmanager,sun.security.pkcs11,org.jboss.byteman,org.openjdk.btrace -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Xbootclasspath/p:$LOG_MANAGER_VERSION -Xbootclasspath/p:$LOG4J_MANAGER -javaagent:$BTRACE_HOME/libs/btrace-agent.jar=scriptdir=$JBEAP_PATH/btrace,debug=false,stdout=true"

# Example
JAVA_TOOL_OPTIONS="-Dmodule.path=d:/7.1.6/modules -Xbootclasspath/p:d:/7.1.6/jboss-modules.jar -Djboss.modules.system.pkgs=org.jboss.logmanager,sun.security.pkcs11,org.jboss.byteman,org.openjdk.btrace -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Xbootclasspath/p:d:/7.1.6/modules/system/layers/base/.overlays/layer-base-jboss-eap-7.1.6.CP/org/jboss/logmanager/main/jboss-logmanager-2.0.11.Final-redhat-00001.jar -Xbootclasspath/p:d:/7.1.6/modules/system/layers/base/org/jboss/log4j/logmanager/main/log4j-jboss-logmanager.jar -javaagent:D:\Developpement\old\Perf\btrace-bin\libs\btrace-agent.jar=scriptdir=D:/7.1.6/btrace,debug=false,stdout=true"
import org.openjdk.btrace.core.annotations.BTrace;
import org.openjdk.btrace.core.annotations.Duration;
import org.openjdk.btrace.core.annotations.Kind;
import org.openjdk.btrace.core.annotations.Location;
import org.openjdk.btrace.core.annotations.OnMethod;
import org.openjdk.btrace.core.annotations.ProbeClassName;
import org.openjdk.btrace.core.annotations.ProbeMethodName;
import org.openjdk.btrace.core.annotations.Where;
import static org.openjdk.btrace.core.BTraceUtils.*;
@BTrace
public class Performance {
private static void log(String mess,String pmn, long dur){
if (dur> 1_000_000){
println("(" + mess + ") " + pmn + " : " + str(dur/1_000_000) + "ms");
}else{
println("(" + mess + ") " + pmn + " : " + str(dur/1_000) + "us");
}
}
@OnMethod(clazz = "javax.crypto.Cipher", method = "/doFinal/", location = @Location(Kind.RETURN))
public static void onMethodDoFinal(@ProbeMethodName(fqn = true) String pmn, @Duration long dur) {
log("JCA",pmn, dur);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment