本月博客排行
-
第1名
龙儿筝 -
第2名
lerf -
第3名
fantaxy025025 - johnsmith9th
- zysnba
- xiangjie88
年度博客排行
-
第1名
青否云后端云 -
第2名
宏天软件 -
第3名
gashero - wy_19921005
- vipbooks
- benladeng5225
- e_e
- wallimn
- javashop
- ranbuijj
- fantaxy025025
- jickcai
- gengyun12
- zw7534313
- qepwqnp
- 解宜然
- ssydxa219
- zysnba
- sichunli_030
- sam123456gz
- arpenker
- tanling8334
- kaizi1992
- gaojingsong
- 龙儿筝
- xpenxpen
- jh108020
- wiseboyloves
- ganxueyun
- xyuma
- xiangjie88
- wangchen.ily
- Jameslyy
- luxurioust
- lemonhandsome
- mengjichen
- jbosscn
- zxq_2017
- lzyfn123
- nychen2000
- forestqqqq
- wjianwei666
- ajinn
- zhanjia
- Xeden
- hanbaohong
- java-007
- 喧嚣求静
- mwhgJava
- kingwell.leng
最新文章列表
BTrace--动态跟踪Java代码的执行状况工具
非常强烈的推荐下BTrace这个工具,用了后不得不说太强大了,BTrace简单来说,就是能在不改动当前程序的情况下,运行时的去监控Java程序的执行状况,例如可以做到内存状况的监控、方法调用的监控等等,官方网站上有非常多详细的例子,我不说太多,只在下面举一个简单的例子来说明它的作用,BTrace的User Guide请见:http://kenai.com/projects/btrace/page ...
BTrace二三事之四:unsafe脚本需要注意的
unsafe脚本怎样才是安全的??除了脚本对已有对象应该限于只读操作,
并且不应该持有对象的引用外,暂时所能想到的,先列几条吧:
1、启用unsafe模式:
修改BTrace启动参数 -Dcom.sun.btrace.unsafe=true
BTrace脚本注解:@BTrace(unsafe = true)
2、BTrace脚本类的ClassLoader为引导类加载器;
被跟踪 ...
BTrace二三事之三:方法签名和参数匹配
@OnMethod注解用来匹配拦截的方法,Location用来指定在方法的某个位置或者某个动作时触发拦截代码。
常用的Location:
Kind.ENTRY(缺省的Location,当进入方法时,代码添加在方法第一行)
Kind.RETURN(当从方法返回时,如果方法有多个返回点,则每一个返回点前都会执行)
Kind.ERROR(当方法执行异常时,当方法执行过程中抛出异常,会触发)
实际生 ...
BTrace二三事之二:OnMethod子类匹配BUG(怀疑)
BTRace1.2.2版本
@OnMethod(clazz = "+my.Command", method="execute")
对子类的匹配(怀疑)存在BUG。
即:加载Agent之前的已载入的Class被拦截了,但Agent加载之后的Class没有拦截。
从源代码看应该是这样,涉及到子类匹配检查的主要两个变量:
hasSubclassChecks : ...
BTrace二三事之一:类转换方式和子类的匹配
以下基于BTrace1.2.2
[url]http://kenai.com/projects/btrace/downloads/directory/releases
[/url]
BTrace类的增强分两部分:
Agent载入之前已加载类的转换;
Agent载入之后新定义类的转换;
其中,Agent载入之前已加载类的转换在:
com.sun.btrace.agent.Main.handleNe ...
使用Btrace查看某个线程池活跃线程大小
某一天想查看某个应用里的hsf活跃线程数(工作线程)。
第一个想到的jstack,根据jstack打出的日志分析。
典型日志:
"HSFBizProcessor-thread-6"prio=10 tid=0x00002aaabdffd800 nid=0x201f runnable [0x000000004768e000]
java.lang.Thread.S ...
BTrace简单实用教程
BTrace本身也是可以独立运行的程序,作用是在不停止目标程序运行的前提下,通过HotSpot虚拟机的HotSwap技术动态插入原本不存在的调试代码。
比如遇到了我们的程序出问题,而又没有足够的打印语句时,我们一般的方法是不得不停掉服务,然后修改代码,增加打印语句,重新编译重新运行来解决,效率很低。
但有了BTrace,我们需要做的就很简单了,举例说明:
比如环境上运行着一个简单程序:
...
BTrace拦截输入参数及返回值
服务端类:
package test;
public class BTraceServer {
public String sayHello(int i) {
return "参数" + i;
}
public static void main(String[] args) throws InterruptedException {
BT ...
BTrace系列之五:实现原理
BTrace系列之五:实现原理
原理简介
BTrace的实现原理其实早有博文阐述,详细见这里。
我在这里只所以在此进行阐述是想带着大家思考一下这些原理的背后,我们是否也能够运用这些原理去实现一些意想不到的事情,其实就是一个抛砖引玉的过程,希望大家能够多多进行讨论,搞出一些开源的好的工具也没准。
BTrace整个实现的原理是Java Agent+ASM+Java instru ...
【性能跟踪】btrace学习二--btrace一个简单例子
btrace安装好了,就看一些语法吧。可以到btrace的官方帮助文档中去看,基本上就可以http://kenai.com/projects/btrace/pages/UserGuide
【注:你本地的jdk要是1.6及以上才行,1.5可是不支持的】
下面以一个例子来说明:
新建了一个工程,目录结构如下:
写btrace脚本和一般的java差别不大,只是用了一些anno ...
【性能跟踪】btrace学习一--安装btrace
最近公司里为了监控线上的类,方法的执行时间,结果等用到了这个开源的小工具,自己也学习了下,感觉比较简单,但是还是挺实用的。
这里做个学习笔记。
1.首先到网上下个Btrace包吧,官方网址是:http://kenai.com/projects/btrace
btrace不用怎么安装,下下来之后解压就可以直接使用了。window下,linux下都是一样的,这里就按window下的安装来说
...