- 浏览: 414729 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
Glogo:
楼主您好,我在试验您的代码的时候发现新开的三个子线程并没有一直 ...
java 高并发 ReentrantLock -- 可重入的锁 -
univasity:
最近发觉也被限速了,投诉一下就好一会~~ 看来明天又要和电信M ...
ADSL上网速度慢 都是帐号限速惹的祸 -
liuyuanhui0301:
java 高并发 ReentrantLock -- 可重入的锁 -
dang_java:
呵.很好的说明文档.
JXTA技术与应用发展 -
helloqidi:
谢谢,学习了
SQL中exists和in的区别
该文转载自:http://rdc.taobao.com/team/jm/archives/509
很多时候在online的应用出现问题时,很多时候我们需要知道更多的程序的运行细节,但又不可能在开发的时候就把程序中所有的运行细节都打印到日志上,通常这个时候能采取的就是修改代码,重新部署,然后再观察,但这种方法对于online应用来说不是很好,另外一方面如果碰到不好改的代码,例如引用的其他的外部的包什么的,就很麻烦了,BTrace就是一个可以在不改代码、不重启应用的情况下,动态的查看程序运行细节的工具,其官方网站在此:http://kenai.com/projects/btrace/ ,在这篇blog中,就来看看如何用BTrace来动态的监测方法的一些运行细节状况。
BTrace通过动态的挂接用java写的代码到运行时上来获取到一些运行细节,例如典型的使用btrace的方法为:
btrace -cp [btrace的jar所在的路径,默认为btrace/build下] [pid] [需要运行的java代码]
例如一段这样的代码:
import java.util.Random;
|
public class Case1{
|
|
public static void main(String[] args) throws Exception{
|
Random random= new Random();
|
CaseObject object= new CaseObject();
|
boolean result= true ;
|
while (result){
|
result=object.execute(random.nextInt( 1000 ));
|
Thread.sleep( 1000 );
|
}
|
}
|
|
} |
public class CaseObject{
|
|
private static int sleepTotalTime= 0 ;
|
|
public boolean execute( int sleepTime) throws Exception{
|
System.out.println( "sleep: " +sleepTime);
|
sleepTotalTime+=sleepTime;
|
Thread.sleep(sleepTime);
|
return true ;
|
}
|
|
} |
如在程序运行的情况下,想知道调用CaseObject的execute方法的以下几种情况,在BTrace中可以这么做:
1、调用此方法时传入的是什么参数,返回的是什么值,当时sleepTotalTime是多少?
BTrace脚本如下:
import static com.sun.btrace.BTraceUtils.*;
|
import com.sun.btrace.annotations.*;
|
|
@BTrace public class TraceMethodArgsAndReturn{
|
@OnMethod (
|
clazz= "CaseObject" ,
|
method= "execute" ,
|
location= @Location (Kind.RETURN)
|
)
|
public static void traceExecute( @Self CaseObject instance, int sleepTime, @Return boolean result){
|
println( "call CaseObject.execute" );
|
println(strcat( "sleepTime is:" ,str(sleepTime)));
|
println(strcat( "sleepTotalTime is:" ,str(get(field( "CaseObject" , "sleepTotalTime" ),instance))));
|
println(strcat( "return value is:" ,str(result)));
|
}
|
} |
然后直接执行btrace -cp btrace/build [pid] TraceMethodArgsAndReturn.java就可以了。
当程序中调用到caseobject的execute方法时,就会在btrace的console中输出相应的信息。
2、execute方法执行耗时是多久?
BTrace脚本如下:
import static com.sun.btrace.BTraceUtils.*;
|
import com.sun.btrace.annotations.*;
|
|
@BTrace public class TraceMethodExecuteTime{
|
|
@TLS static long beginTime;
|
|
@OnMethod (
|
clazz= "CaseObject" ,
|
method= "execute"
|
)
|
public static void traceExecuteBegin(){
|
beginTime=timeMillis();
|
}
|
|
@OnMethod (
|
clazz= "CaseObject" ,
|
method= "execute" ,
|
location= @Location (Kind.RETURN)
|
)
|
public static void traceExecute( int sleepTime, @Return boolean result){
|
println(strcat(strcat( "CaseObject.execute time is:" ,str(timeMillis()-beginTime)), "ms" ));
|
}
|
} |
3、谁调用了execute方法?
BTrace脚本如下:
import static com.sun.btrace.BTraceUtils.*;
|
import com.sun.btrace.annotations.*;
|
|
@BTrace public class TraceMethodCallee{
|
@OnMethod (
|
clazz= "CaseObject" ,
|
method= "execute"
|
)
|
public static void traceExecute(){
|
println( "who call CaseObject.execute :" );
|
jstack();
|
}
|
} |
4、有没有人调用CaseObject中的哪一行代码?
BTrace脚本如下:
import static com.sun.btrace.BTraceUtils.*;
|
import com.sun.btrace.annotations.*;
|
|
@BTrace public class TraceMethodLine{
|
@OnMethod (
|
clazz= "CaseObject" ,
|
location= @Location (value=Kind.LINE,line= 5 )
|
)
|
public static void traceExecute( @ProbeClassName String pcn, @ProbeMethodName String pmn, int line){
|
println(strcat(strcat(strcat( "call " ,pcn), "." ),pmn));
|
}
|
} |
从上面可看出,在有了BTrace后,要动态的跟踪代码的运行细节还是非常爽的,更多的细节的操作请大家查看BTrace的User Guide。
发表评论
-
JVM 深入笔记
2012-04-12 20:36 909JVM 深入笔记(1)内存区域是如何划分的? 一个超短的前言 ... -
JVM启动参数
2011-06-10 16:27 933java [jvmargs] class [arguments ... -
JVM指令集 和 一个异常例子
2011-05-19 16:14 983指令码 助记符 说明 0x00 nop ... -
The Top Java Memory Problems – Part 1
2011-05-18 11:01 867转载:http://blog.dynatrace.com/20 ... -
大方法的执行性能与调优过程小记
2011-04-18 16:20 763该文章转载自:http://rdc.taobao.com/te ... -
十个最好的Java性能故障排除工具
2011-04-18 16:02 888推荐十个最好的Java性能 ... -
两个OOM Cases排查过程的分享
2011-04-18 15:39 897分享一下两个OOM Cases的查找过程,一个应用是Nativ ... -
Monitoring Java garbage collection with jstat
2011-04-18 15:28 832The original article is at : ht ... -
理解Heap Profling名词-Shallow和Retained Sizes
2011-04-18 14:58 939所有包含Heap Profling功能的工具(MAT, You ... -
Java深度历险(四)——Java垃圾回收机制与引用类型
2011-04-01 08:18 928Java语言的一个重要特性 ... -
Thread Dump 和Java应用诊断
2011-03-30 08:08 1099Thread Dump 和Java应用诊断 ... -
Memory Analysis Part 1 – Obtaining a Java Heapdump
2011-03-14 16:06 1087For troubleshooting Java memory ... -
Java Memory Leaks et al. (2. Act)
2011-03-14 15:37 897The first act of this blog-seri ... -
Erlang memory architecture vs Java memory architecture
2011-03-14 15:36 881I read a really, really interes ... -
The Java Memory Architecture (1. Act)
2011-03-14 15:15 1387One of the biggest strength of ... -
Permanent generation
2011-03-14 14:53 1199版权声明:转载时请以 ... -
JVM内存模型以及垃圾回收
2011-03-13 09:38 912内存由 Perm 和 Heap 组成. 其中 Heap ... -
Java虚拟机垃圾回收机制
2011-03-13 09:31 769一、相关概念 基本 ... -
JVM结构
2011-03-10 14:43 861类文件格式 JVM使用一 ... -
OOM与JVM(转)
2009-03-24 15:49 896OOM与JVM(转) 2008年08月08日 星期五 15: ...
相关推荐
btrace btrace btrace btrace
自己做的BTrace监控,Linux服务器上的tomcat工程,压缩包包含BTrace开发所需的jar包 BTrace简单示例代码 jvisualvm.exe如果远程服务器监控JVM虚拟机信息
1.btrace扩展是在btrace已由功能上进行的扩展,原有功能和使用方式依然没变。目前版本扩展了两个功能:接口时间监控和接口时间调用树监控。扩展之后的btrace功能使用时都不需要写btrace脚本。 2.使用接口时间监控...
btrace支持jdk1.7 linux下使用 非常好用哦 呵呵呵呵
btrace-bin直接解压缩配置环境变量后即可运行使用。 java监控调试工具虚拟机监控程序,利用BTrace可以在线监控java程序状态。 BTrace是一种安全,动态的Java跟踪工具。BTrace通过动态(字节码)检测正在运行的Java...
Btrace:java性能调优及问题追踪工具 Btrace:java性能调优及问题追踪工具
btrace安装包,linux和windows通用,1.3.9版本。可以直接解压缩配置环境变量后运行使用
btrace1.3.9最新版本转过来
btrace1.3.9 jdk1.8 maven 编译构建 http://github.com/btraceio/btrace
java 在线检测插件Btrace, 无需重启服务,即可在线定位问题
btrace api 1.2 文档,从网上扒下来自己做的,其他地方貌似都没有chm,提供给大家使用 btrace是一个跟踪、监控java程序的小工具,能够在不改变源代码的情况下监控很多东西,比如:方法运行时间、输入输出参数、抛出...
btrace_extend-master,解压后上传至服务器即可以使用btrace命令
Btrace用来做项目检测,访问过的类方法统计,无侵略性,JDK1.6
jvisualvm btrace插件离线安装,如果jvisualvm不能安装btrace,则可进行离线安装。 这里收集了安装btrace所需要的依赖包,直接添加 即可安装
btrace(阿里封装过的,使用更简单)
Btrace Java 发布版本,Java 虚拟机监控程序
btrace workbench 插件jar包打包下载,jvisualvm的插件
jvisualvm-btrace离线安装包。 jvisualvm btrace插件离线安装包1.2.85版本,目前官网不支持国内在线下载。 含相关依赖包:jsyntaxpane-lib.nbm、net-java-btrace-api.nbm、net-java-btrace-visualvm.nbm、...
BTrace通过动态(字节码)检测类运行Java程序。BTrace插入跟踪行动运行Java程序的类和hotswaps跟踪程序类。 因此,也就成为我们线上跟踪生产代码的有力工具!
Btrace非侵入式调试Java程序神奇win版本,可以在线调试java应用不需要重新编译