- 浏览: 142334 次
最新评论
-
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 1229<!--<br /> <br /&g ... -
JVM参数方法总结
2012-04-10 10:53 980这里向大家简单介绍一下如何设置JVM参数,主要包括堆设置,垃圾 ... -
linux top命令详解
2012-03-31 13:19 988top命令和ps命令的基本作用是相同的,显示系统当前的进 ... -
eclipse热键
2012-03-19 13:24 0Ctrl+1 快速修复(最经典 ... -
HTTP 响应状态码
2012-02-21 17:22 1595HTTP 响应状态码 <script type=& ... -
JAVA 内存详解 (理解 JVM 如何使用 Windows 和 Linux 上的本机内存)
2012-02-06 15:20 1764级别: 中级 Andrew Hall , 软件工程师, IB ... -
shell字符串处理
2011-12-08 17:03 910在做shell批处理程序时 ... -
三次握手Three-way Handshake
2011-10-21 14:16 992三次握手Three-way Handshake 一个虚拟 ... -
讨论 Setsockopt选项
2011-07-26 10:21 1154有时候我们要控制套接 ... -
TCP连接建立与关闭
2011-07-03 19:16 1161TCP 是一个面向连接的 ... -
转 JAVA并发容器代码随读
2011-06-14 10:21 1423JAVA并发容器代码随读 1. java.u ... -
转 Linux 终端输出字体颜色说明
2011-06-04 01:04 2771文本终端的颜色可以使用“ANSI非常规字符序列”来生成。举例: ... -
转 LVS体系结构分析
2011-05-26 12:51 1225问题 如今,无论在企 ... -
分布式服务框架 Zookeeper -- 管理分布式环境中的数
2011-05-25 14:13 1389本文介绍的 Zookeeper 是以 3.2.2 ... -
转 LVS 负载均衡算法
2011-05-23 15:13 1182轮叫调度RR(Round-Robin Schedulin ... -
转 GC算法
2011-04-21 10:42 1863Java与C++之间有一堵由内 ... -
使用Jstat监控gc情况
2011-04-14 10:16 1292性能测试过程中,我们该如何监控java虚拟机内存的使用情况 ... -
TCP/IP 选项TcpTimedWaitDelay设置
2011-04-13 14:34 1309TCP/IP 选项TcpTimedWaitDelay设置 ... -
HAProxy配置解释
2011-04-07 17:28 4839HAProxy配置中分成五部分内容,当然这些组件不是必 ... -
配置开发支持高并发TCP连接的Linux应用程序全攻略
2011-04-07 16:05 9481、修改用户进程可打开文件数限制 在Linux平台上,无论编 ...
相关推荐
ADAMS入门详解与实例
由于提供的文件信息部分存在重复内容以及与标题“ADAMS入门详解与实例”不相关的信息,我会忽略这部分重复及无关内容,并直接从给定的标题和描述中提取知识点。 ADAMS(Automatic Dynamic Analysis of Mechanical ...
本实例精讲将带你从基础到深入地掌握ADAMS的使用技巧和精髓,通过实际操作来提升对软件的理解和应用能力。 在ADAMS中,我们首先需要了解的是基本概念和工作流程。多体动力学涉及到物体之间的相互作用,包括力、速度...
### Adams入门详解与实例知识点梳理 #### 一、Adams软件概述 - **定义与应用领域**:Adams是一款世界领先的多体动力学仿真软件,主要用于机械系统的动态模拟与分析,能够帮助工程师们准确地预测产品在实际工作环境...
本资料“labview入门开发100实例及对应部分vi”旨在帮助初学者快速掌握LabVIEW的基本操作和编程技巧。 1. **图形化编程基础**:LabVIEW的核心是G语言,即图形化编程语言。通过拖拽函数节点和连线来构建程序,这种...
googleEarth入门资料和例子(VC 6.0),基本入门资料和两个例子!googleEarth入门资料和例子(VC 6.0),基本入门资料和两个例子!googleEarth入门资料和例子(VC 6.0),基本入门资料和两个例子!googleEarth入门资料和例子...
这个入门例子是为初学者设计的,旨在帮助他们快速理解和上手Spring MVC。 首先,我们需要理解Spring MVC的基本组件: 1. **DispatcherServlet**:这是Spring MVC的核心组件,作为前端控制器接收所有的HTTP请求,并...
adams 入门与提高最推荐的书籍,有大量实例,适合初学者 。
C++Builder 实例入门 C++Builder 实例入门 C++Builder 实例入门
可编程控制器入门与应用实例西门子S7200系列
为了确保用户能够顺利入门使用阿里云ECS,本文将详细介绍其使用方法,包括实例配置、操作系统更换、快照与镜像使用、磁盘扩容、配置升降、安全组操作等核心知识点。 首先,了解阿里云ECS的基本概念至关重要。ECS...
Qt 学习经典入门实例 Qt 是一个跨平台的应用程序开发框架,由 Nokia 公司开发,主要用于开发 GUI 程序。Qt Designer 是 Qt 中的一个重要组件,用于设计和构建图形用户界面。 Qt 学习经典入门实例 本文将通过一...
李增刚的书 比较基础 也比较简单明了 对了解nastran卡片文件和格式有很大的帮助
### ADAMS入门详解与实例 #### 知识点概述 ADAMS(Automatic Dynamic Analysis of Mechanical Systems)是一款广泛应用于机械系统动力学仿真分析的软件,由美国MDI公司开发。该软件主要利用虚拟样机技术,对复杂...
在“使用Protege创建本体进行推理-入门实例”中,我们将探讨如何通过Protege 5.2构建一个简单的生物分类本体,并利用内置的HermiT推理机进行推理。 首先,我们需要理解本体的基本构成。在这个实例中,我们有两类...
本资源“C#入门小例子”是为初学者准备的,它包含了一百个实例程序,旨在帮助新手快速掌握C#的基础知识和编程技巧。 首先,C#(读作"C Sharp")是微软公司于2000年推出的一种面向对象的编程语言,它基于.NET框架,...
《51单片机轻松入门与典型实例》是一本针对初学者设计的教程,旨在帮助读者从零开始学习51单片机的开发。51单片机是微控制器领域中最基础、最广泛使用的型号之一,它在电子工程、自动化、物联网等领域的应用十分广泛...
《FPGA应用开发入门与典型实例资料代码大全》是一份专为初学者和有经验的工程师准备的资源集合,涵盖了FPGA(Field-Programmable Gate Array)开发的基础知识及多个实际应用案例。通过这份资料,你可以深入理解FPGA...
通过"QT学习入门"和"QT5开发及实例"的学习,开发者不仅可以掌握QT的基础知识,还能进一步提升在QT5框架下的应用开发能力,为构建高质量、跨平台的应用程序打下坚实基础。结合PDF说明和代码调试,学习效果将更为显著...
非常棒的 Vue3 Element 统解决方案 vue3快速入门、vue3实用入门到熟练实例 学习了vue3官网、看了视频好像感觉知道了,但实际又不会建项目。这个项目就是上你从入门到熟练的实例。 该方案作为一套多功能的后台框架...