- 浏览: 144194 次
-
最新评论
-
zhh0000zhh:
用1W的线程跑epoll,别误人子弟了行不
freebsd里的kqueue 和linux 2.6下的epoll -
shiguanghui:
拼命的转载。你都没试过,别人的疑问你也不回答。你转来转去只是制 ...
oracle rownum与order by -
programdolt:
我最终验证了,和索引建立时间先后没关系应该必须是“非空索引”, ...
oracle rownum与order by -
programdolt:
我感觉,索引必须提前建立,在数据插入前建立,这样才能符合楼主的 ...
oracle rownum与order by -
wenyizeng:
貌似还不错
ant 命令详解
介绍
Btrace (Byte Trace)是sun推出的一款java 动态、安全追踪(监控)工具,可以不停机的情况下监控线上情况,并且做到最少的侵入,占用最少的系统资源。
In a way, BTrace scripts are very similar to AOP's aspects, but can be attached to any existing Java code (or better, bytecode) at runtime and without any configuration or modification at development time.
运行环境搭建
Steps to run BTrace
1.下载[btrace|http://kenai.com/projects/btrace/downloads/directory/releases]包 并把btrace的命令放到path中
2. jps命令查出需要监控的jvm pid
3. 编写BTrace程序 (安装包中带有大量的例子)
4. Run btrace tool by the following command line:
btrace <pid> <btrace-script>
BTrace能作的事情
记录以下事件:
* method calls;
* execution times;
* constructor invocation;
* available memory;
触发脚本执行的场景:
Script execution is tied to several situations
* reaching a specific line number;
* invoking a given method;
* returning from a method;
* invoking system calls (e.g. exit);
* recurring timer (period execution at fixed intervals);
BTrace不能作的事情
保证BTrace追踪的是只读操作,所以有一堆限制:
不仅强制要求java脚本需要提供public static方法.而且,脚本里无法实例化对象,数组,不能抛异常或捕捉,不能有循环,内部类等。
特别是不能调用任何的实例、静态方法,除了com.sun.btrace.BTraceUtils类static methods。*所以BTrace的功能全部在BTraceUtils中的方法。*
To guarantee that the tracing actions are "read-only" (i.e., the trace actions don't change the state of the program traced) and bounded (i.e., trace actions terminate in bounded time), a BTrace program is allowed to do only a restricted set of actions. In particular, a BTrace class
* can not create new objects.
* can not create new arrays.
* can not throw exceptions.
* can not catch exceptions.
* can not make arbitrary instance or static method calls - only the public static methods of com.sun.btrace.BTraceUtils class may be called from a BTrace program.
* can not assign to static or instance fields of target program's classes and objects. But, BTrace class can assign to it's own static fields ("trace state" can be mutated).
* can not have instance fields and methods. Only static public void returning methods are allowed for a BTrace class. And all fields have to be static.
* can not have outer, inner, nested or local classes.
* can not have synchronized blocks or synchronized methods.
* can not have loops (for, while, do..while)
* can not extend arbitrary class (super class has to be java.lang.Object)
* can not implement interfaces.
* can not contains assert statements.
* can not use class literals.
例子
监控某个方法的执行时间
监控所有HTTP request请求的执行时间
- @TLS
- private static String invoke = "";
- @OnMethod(clazz = "javax.servlet.http.HttpServlet", method = "service", type = "void service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)")
- public static void start(@ProbeClassName String probeClass, @ProbeMethodName String probeMethod) {
- invoke = concat(str(threadId(currentThread())), strcat("_", str(timeMillis())));
- print(invoke);
- print(" ");
- print(probeClass);
- print(" ");
- print(probeMethod);
- print(" s ");
- println(timeMillis());
- }
- @OnMethod(clazz = "javax.servlet.http.HttpServlet", method = "service", type = "void service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)", location = @Location(Kind.RETURN))
- public static void end(@ProbeClassName String probeClass, @ProbeMethodName String probeMethod) {
- print(invoke);
- print(" ");
- print(probeClass);
- print(" ");
- print(probeMethod);
- print(" e ");
- println(timeMillis());
- invoke = "";
- }
@TLS private static String invoke = ""; @OnMethod(clazz = "javax.servlet.http.HttpServlet", method = "service", type = "void service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)") public static void start(@ProbeClassName String probeClass, @ProbeMethodName String probeMethod) { invoke = concat(str(threadId(currentThread())), strcat("_", str(timeMillis()))); print(invoke); print(" "); print(probeClass); print(" "); print(probeMethod); print(" s "); println(timeMillis()); } @OnMethod(clazz = "javax.servlet.http.HttpServlet", method = "service", type = "void service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)", location = @Location(Kind.RETURN)) public static void end(@ProbeClassName String probeClass, @ProbeMethodName String probeMethod) { print(invoke); print(" "); print(probeClass); print(" "); print(probeMethod); print(" e "); println(timeMillis()); invoke = ""; }
监控所有HTTP request请求的具体java调用栈 call stack以及执行时间
在上面监控http request的基础上,增加你关心类的方法。然后通过ID(Thread ID, 时间戳)生成对应的调用图。
- import static com.sun.btrace.BTraceUtils.name;
- import static com.sun.btrace.BTraceUtils.print;
- import static com.sun.btrace.BTraceUtils.println;
- import static com.sun.btrace.BTraceUtils.probeClass;
- import static com.sun.btrace.BTraceUtils.probeMethod;
- 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 PrintTimes {
- /**
- * 开始时间
- */
- @TLS
- private static long startTime = 0;
- /**
- * 方法开始时调用
- */
- @OnMethod(clazz = "/com\\.mike\\../", method = "/.+/")
- public static void startMethod() {
- startTime = timeMillis();
- }
- /**
- * 方法结束时调用<br>
- * Kind.RETURN这个注解很重要
- */
- @SuppressWarnings("deprecation")
- @OnMethod(clazz = "/com\\.mike\\../", method = "/.+/", location = @Location(Kind.RETURN))
- public static void endMethod() {
- print(strcat(strcat(name(probeClass()), "."), probeMethod()));
- print(" [");
- print(strcat("Time taken : ", str(timeMillis() - startTime)));
- println("]");
- }
- }
import static com.sun.btrace.BTraceUtils.name; import static com.sun.btrace.BTraceUtils.print; import static com.sun.btrace.BTraceUtils.println; import static com.sun.btrace.BTraceUtils.probeClass; import static com.sun.btrace.BTraceUtils.probeMethod; 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 PrintTimes { /** * 开始时间 */ @TLS private static long startTime = 0; /** * 方法开始时调用 */ @OnMethod(clazz = "/com\\.mike\\../", method = "/.+/") public static void startMethod() { startTime = timeMillis(); } /** * 方法结束时调用<br> * Kind.RETURN这个注解很重要 */ @SuppressWarnings("deprecation") @OnMethod(clazz = "/com\\.mike\\../", method = "/.+/", location = @Location(Kind.RETURN)) public static void endMethod() { print(strcat(strcat(name(probeClass()), "."), probeMethod())); print(" ["); print(strcat("Time taken : ", str(timeMillis() - startTime))); println("]"); } }
发表评论
-
maven实际应用
2012-05-29 15:41 1264<!--<br /> <br /&g ... -
JVM参数方法总结
2012-04-10 10:53 992这里向大家简单介绍一下如何设置JVM参数,主要包括堆设置,垃圾 ... -
linux top命令详解
2012-03-31 13:19 1002top命令和ps命令的基本作用是相同的,显示系统当前的进 ... -
eclipse热键
2012-03-19 13:24 0Ctrl+1 快速修复(最经典 ... -
HTTP 响应状态码
2012-02-21 17:22 1618HTTP 响应状态码 <script type=& ... -
JAVA 内存详解 (理解 JVM 如何使用 Windows 和 Linux 上的本机内存)
2012-02-06 15:20 1777级别: 中级 Andrew Hall , 软件工程师, IB ... -
shell字符串处理
2011-12-08 17:03 921在做shell批处理程序时 ... -
三次握手Three-way Handshake
2011-10-21 14:16 1009三次握手Three-way Handshake 一个虚拟 ... -
讨论 Setsockopt选项
2011-07-26 10:21 1197有时候我们要控制套接 ... -
TCP连接建立与关闭
2011-07-03 19:16 1214TCP 是一个面向连接的 ... -
转 JAVA并发容器代码随读
2011-06-14 10:21 1445JAVA并发容器代码随读 1. java.u ... -
转 Linux 终端输出字体颜色说明
2011-06-04 01:04 2782文本终端的颜色可以使用“ANSI非常规字符序列”来生成。举例: ... -
转 LVS体系结构分析
2011-05-26 12:51 1281问题 如今,无论在企 ... -
分布式服务框架 Zookeeper -- 管理分布式环境中的数
2011-05-25 14:13 1432本文介绍的 Zookeeper 是以 3.2.2 ... -
转 LVS 负载均衡算法
2011-05-23 15:13 1210轮叫调度RR(Round-Robin Schedulin ... -
转 GC算法
2011-04-21 10:42 1911Java与C++之间有一堵由内 ... -
使用Jstat监控gc情况
2011-04-14 10:16 1326性能测试过程中,我们该如何监控java虚拟机内存的使用情况 ... -
TCP/IP 选项TcpTimedWaitDelay设置
2011-04-13 14:34 1319TCP/IP 选项TcpTimedWaitDelay设置 ... -
HAProxy配置解释
2011-04-07 17:28 4865HAProxy配置中分成五部分内容,当然这些组件不是必 ... -
配置开发支持高并发TCP连接的Linux应用程序全攻略
2011-04-07 16:05 10011、修改用户进程可打开文件数限制 在Linux平台上,无论编 ...
相关推荐
嵌入式MCGS串口通信快速入门及编程实例_第1章_MCGS简介.pdf嵌入式MCGS串口通信快速入门及编程实例_第1章_MCGS简介.pdf嵌入式MCGS串口通信快速入门及编程实例_第1章_MCGS简介.pdf嵌入式MCGS串口通信快速入门及编程...
ADAMS入门详解与实例
由于提供的文件信息部分存在重复内容以及与标题“ADAMS入门详解与实例”不相关的信息,我会忽略这部分重复及无关内容,并直接从给定的标题和描述中提取知识点。 ADAMS(Automatic Dynamic Analysis of Mechanical ...
本实例精讲将带你从基础到深入地掌握ADAMS的使用技巧和精髓,通过实际操作来提升对软件的理解和应用能力。 在ADAMS中,我们首先需要了解的是基本概念和工作流程。多体动力学涉及到物体之间的相互作用,包括力、速度...
《FPGA应用开发入门与典型实例教程》是一本旨在引导初学者快速掌握FPGA(Field-Programmable Gate Array)技术的教程。FPGA是一种可编程逻辑器件,它允许用户根据设计需求自由配置其内部逻辑结构,广泛应用于通信、...
在提供的压缩包文件“C#入门经典全书例子代码”中,包含了书中每一个章节实例的完整源代码。这些代码是学习和理解C#的关键资源,因为它们将理论知识与实践相结合,使读者能够亲手运行并调试程序,从而更深刻地领会C#...
### Adams入门详解与实例知识点梳理 #### 一、Adams软件概述 - **定义与应用领域**:Adams是一款世界领先的多体动力学仿真软件,主要用于机械系统的动态模拟与分析,能够帮助工程师们准确地预测产品在实际工作环境...
这个入门例子是为初学者设计的,旨在帮助他们快速理解和上手Spring MVC。 首先,我们需要理解Spring MVC的基本组件: 1. **DispatcherServlet**:这是Spring MVC的核心组件,作为前端控制器接收所有的HTTP请求,并...
adams 入门与提高最推荐的书籍,有大量实例,适合初学者 。
2. **安全性**:BTrace使用JDK的动态代理机制,确保只在安全的点插入探查代码,避免引发运行时错误或性能下降。 3. **实时性能分析**:通过BTrace,你可以实时查看方法调用的时间、对象创建频率、内存分配情况等,...
C 语言入门题目 经典实例 小游戏设计.zipC 语言入门题目 经典实例 小游戏设计.zipC 语言入门题目 经典实例 小游戏设计.zipC 语言入门题目 经典实例 小游戏设计.zipC 语言入门题目 经典实例 小游戏设计.zipC 语言入门...
下面是对《可编程控制器入门与应用实例 西门子S7-200系列.pdf》中可能包含的知识点的总结: 1. PLC基本概念与原理 - 可编程逻辑控制器定义及其在自动化中的作用。 - PLC系统结构与工作原理,包括CPU、存储器、I/O...
C++Builder 实例入门 C++Builder 实例入门 C++Builder 实例入门
开关电源设计入门与实例解析是一本面向初学者和行业工程师的实用工具书,旨在通过基础知识的讲解和具体实例的分析,帮助读者掌握开关电源设计的核心技术。 首先,我们需要理解开关电源的基本工作原理。开关电源的...
"汇编语言入门例子"这个压缩包文件提供了一些基础的汇编语言编程实例,非常适合想要入门汇编的朋友们学习。 汇编语言的核心概念包括指令集、寄存器、地址和操作码。每个汇编程序都是由一系列指令构成的,这些指令...
React 入门实例教程React 入门实例教程React 入门实例教程React 入门实例教程
实例011 使用值类型和引用类型输出不同的字段 实例012 判断当前系统日期是星期几 实例013 定义局部变量输出不同的字段 实例014 定义循环内部变量并输出变量的值 实例015 定义常量计算圆的周长 实例016 使用“+”编写...
李增刚的书 比较基础 也比较简单明了 对了解nastran卡片文件和格式有很大的帮助
本书是关于MSC.Software公司旗下两款著名工程软件——MSC.PATRAN和MSC.NASTRAN的入门指南,尤其适合工程技术人员、理工科院校学生及教师等掌握有限元分析软件的使用方法。 ### 第一部分:MSC.Software公司简介 MSC...