btrace 笔记
转载请注明原链接地址 http://www.cnblogs.com/dongxiao-yang/p/6134393.html
btrace 是一个可以不用重启线上java业务查问题的神器,记一下自己折腾半天写的几个demo
java业务代码
package com.youku.data.test.kfktest; /**
* Hello world!
*
*/
public class App {
public static void main(String[] args) throws InterruptedException {
System.out.println("Hello World!"); int[] a = new int[] {
20,
21,
21,
21,
22,
19,
24,
27,
20,
34,
23,
20,
17,
21,
20,
18,
19,
20,
24,
20,
23,
22,
27
}; //int s=0;
BtraceTest bt = new BtraceTest();
while(true)
{
for(int i:a)
{
bt.getret(i);
Thread.sleep(100);
} Thread.sleep(500); } //System.out.println(s); }
}
package com.youku.data.test.kfktest;
public class BtraceTest {
private long ret = 0;
public long getret(int num) {
ret += num;
// Thread.sleep(10);
method1();
method2();
method3();
return ret;
}
private void method1() {
String a = "asdfadsfa" + "sdfasdfdsf";
}
private void method2() {
double a = 1000 / 3.14;
}
private void method3() {
float a = (float) (1000 / 3.14);
}
}
btrace 脚本
/* BTrace Script Template */
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*; @BTrace
public class TracingScript {
/* put your code here */
@TLS private static long startTime = 0; @OnMethod(
clazz="com.youku.data.test.kfktest.BtraceTest",
method="getret"
)
public static void startExecute(){
startTime = timeNanos();
} @OnMethod(
clazz="com.youku.data.test.kfktest.BtraceTest",
method="getret",
location=@Location(Kind.RETURN)
)
public static void traceExecute(@Duration long duration,@ProbeMethodName String pmn){
long time = timeNanos() - startTime;
println(strcat("duration(nanos): ", str(duration)));
println(strcat("execute time(nanos): ", str(time))); println(strcat("ProbeMethodName(pmn): ", str(pmn)));
}
}
package com.sun.btrace.samples; import com.sun.btrace.BTraceUtils;
import com.sun.btrace.Profiler;
import com.sun.btrace.annotations.*; @BTrace class Profiling {
@Property
Profiler swingProfiler = BTraceUtils.Profiling.newProfiler(); @OnMethod(clazz="com.youku.data.test.kfktest.BtraceTest", method="/.*/")
void entry(@ProbeMethodName(fqn=true) String probeMethod) {
BTraceUtils.Profiling.recordEntry(swingProfiler, probeMethod);
} @OnMethod(clazz="com.youku.data.test.kfktest.BtraceTest", method="/.*/", location=@Location(value=Kind.RETURN))
void exit(@ProbeMethodName(fqn=true) String probeMethod, @Duration long duration) {
BTraceUtils.Profiling.recordExit(swingProfiler, probeMethod, duration);
} @OnTimer(5000)
void timer() {
BTraceUtils.Profiling.printSnapshot("Swing performance profile", swingProfiler);
}
}
脚本启动命令
./bin/btrace <pid> /Users/dongxiaoyang/Desktop/<btracescript.java>
参考资料
3 使用jvisualvm.exe 的Btrace插件介绍/使用教程
btrace 笔记的更多相关文章
- btrace 实践笔记
btrace简介: btrace 是一个使用在JAVA平台上面的,安全的,动态跟踪工具.它一般用于动态跟踪正在运行的jAVA程序. 使用说明在这里.下载地址在这里. 下载的时候 ...
- BTrace使用小结
简介 BTrace是一个安全的JVM动态追踪工具,最初为原Sun公司Kenai项目下面的一个子项目. 典型的使用场景是,“我要查个问题,可那个方法没有打印入口参数和返回结果日志”,“我想看某个方法的执 ...
- git-简单流程(学习笔记)
这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- SQL Server技术内幕笔记合集
SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- NET Core-学习笔记(三)
这里将要和大家分享的是学习总结第三篇:首先感慨一下这周跟随netcore官网学习是遇到的一些问题: a.官网的英文版教程使用的部分nuget包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列 ...
- springMVC学习笔记--知识点总结1
以下是学习springmvc框架时的笔记整理: 结果跳转方式 1.设置ModelAndView,根据view的名称,和视图渲染器跳转到指定的页面. 比如jsp的视图渲染器是如下配置的: <!-- ...
随机推荐
- SqlServer日期(convert函数,getdate函数)
SqlServer日期(convert函数,getdate函数) 函数GETDATE()的返回值在显示时只显示到秒.实际上,SQL Sever内部时间可以精确到毫秒级(确切地说,可以精确到3.33毫秒 ...
- Linux crontab定时执行任务 命令格式与详细例子
基本格式 : * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 第4列表示 ...
- express开发实例
express获取参数有三种方法:官网介绍如下 Checks route params (req.params), ex: /user/:id Checks query string params ( ...
- 回顾javase点滴
数据类型 8种基本数据类型和引用类型 数据类型 占用位数 存储方式 最小值 最大值 默认值 byte 8 1+7 -128(-2^7) 127(2^7-1) 0 short 16 1+15 -3276 ...
- HDU 1166 敌兵布阵 线段树的基本应用——动态区间和问题
题目: http://acm.hdu.edu.cn/showproblem.php?pid=1166 简单题,1A了,这个好像就是传说中的“点树”. 设当前结点表示线段[left, right],编号 ...
- Linux系统调优
Linux核心参数都是放置在/proc下面:系统的参数都是放置在/proc/sys swap最好放置在运行最快的硬盘上面,但是swap并能取代ram,因为并有I/O上面的损耗,所以优先考虑检验内存没有 ...
- tableView被Nav挡住了
// 1. // self.navigationController.navigationBar.translucent = NO; // self.tabBarController.ta ...
- Servlet高级应用---Servlet与缓存
一]设置缓存文件的有效日期 重点方法: HttpServletRequest类: 1>String getRequest ...
- Stanford CoreNLP--Split Sentence
分句功能参考 Stanford Tokenizer. 在edu.stanford.nlp.pipeline包中实现了一系列分词分句功能,其中SentenceAnnotator类实现了对文件分句功能. ...
- Library Cache Lookup
Libraey Cache Data Access library cache是关于SQL语句的SGA中的一系列的链表, library cache是通过访问一系列的hash buckets,实现使用 ...