- 浏览: 139469 次
最新评论
-
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 1175<!--<br /> <br /&g ... -
JVM参数方法总结
2012-04-10 10:53 945这里向大家简单介绍一下如何设置JVM参数,主要包括堆设置,垃圾 ... -
linux top命令详解
2012-03-31 13:19 959top命令和ps命令的基本作用是相同的,显示系统当前的进 ... -
eclipse热键
2012-03-19 13:24 0Ctrl+1 快速修复(最经典 ... -
HTTP 响应状态码
2012-02-21 17:22 1561HTTP 响应状态码 <script type=& ... -
JAVA 内存详解 (理解 JVM 如何使用 Windows 和 Linux 上的本机内存)
2012-02-06 15:20 1722级别: 中级 Andrew Hall , 软件工程师, IB ... -
shell字符串处理
2011-12-08 17:03 883在做shell批处理程序时 ... -
三次握手Three-way Handshake
2011-10-21 14:16 937三次握手Three-way Handshake 一个虚拟 ... -
讨论 Setsockopt选项
2011-07-26 10:21 1068有时候我们要控制套接 ... -
TCP连接建立与关闭
2011-07-03 19:16 1120TCP 是一个面向连接的 ... -
转 JAVA并发容器代码随读
2011-06-14 10:21 1390JAVA并发容器代码随读 1. java.u ... -
转 Linux 终端输出字体颜色说明
2011-06-04 01:04 2738文本终端的颜色可以使用“ANSI非常规字符序列”来生成。举例: ... -
转 LVS体系结构分析
2011-05-26 12:51 1184问题 如今,无论在企 ... -
分布式服务框架 Zookeeper -- 管理分布式环境中的数
2011-05-25 14:13 1338本文介绍的 Zookeeper 是以 3.2.2 ... -
转 LVS 负载均衡算法
2011-05-23 15:13 1138轮叫调度RR(Round-Robin Schedulin ... -
转 GC算法
2011-04-21 10:42 1816Java与C++之间有一堵由内 ... -
使用Jstat监控gc情况
2011-04-14 10:16 1222性能测试过程中,我们该如何监控java虚拟机内存的使用情况 ... -
TCP/IP 选项TcpTimedWaitDelay设置
2011-04-13 14:34 1267TCP/IP 选项TcpTimedWaitDelay设置 ... -
HAProxy配置解释
2011-04-07 17:28 4804HAProxy配置中分成五部分内容,当然这些组件不是必 ... -
配置开发支持高并发TCP连接的Linux应用程序全攻略
2011-04-07 16:05 9111、修改用户进程可打开文件数限制 在Linux平台上,无论编 ...
相关推荐
嵌入式MCGS串口通信快速入门及编程实例_第1章_MCGS简介.pdf嵌入式MCGS串口通信快速入门及编程实例_第1章_MCGS简介.pdf嵌入式MCGS串口通信快速入门及编程实例_第1章_MCGS简介.pdf嵌入式MCGS串口通信快速入门及编程...
嵌入式MCGS串口通信快速入门及编程实例_第9章_万能通信之Modbus_温度测量.pdf嵌入式MCGS串口通信快速入门及编程实例_第9章_万能通信之Modbus_温度测量.pdf嵌入式MCGS串口通信快速入门及编程实例_第9章_万能通信之...
自己做的BTrace监控,Linux服务器上的tomcat工程,压缩包包含BTrace开发所需的jar包 BTrace简单示例代码 jvisualvm.exe如果远程服务器监控JVM虚拟机信息
嵌入式MCGS串口通信快速入门及编程实例_第10章_Modbus通信之CRC校验_CRC计算.pdf嵌入式MCGS串口通信快速入门及编程实例_第10章_Modbus通信之CRC校验_CRC计算.pdf嵌入式MCGS串口通信快速入门及编程实例_第10章_Modbus...
Python入门经典实例Python入门经典实例Python入门经典实例Python入门经典实例Python入门经典实例Python入门经典实例Python入门经典实例Python入门经典实例Python入门经典实例Python入门经典实例Python入门经典实例...
ADAMS入门详解与实例
JMS、ActiveMQ入门及深入使用的例子,这些例子都是我测试的
嵌入式MCGS串口通信快速入门及编程实例_第4章_万能通信之自发自收_单机通信.pdf嵌入式MCGS串口通信快速入门及编程实例_第4章_万能通信之自发自收_单机通信.pdf嵌入式MCGS串口通信快速入门及编程实例_第4章_万能通信...
ADAMS入门详解与实例 第2版978-7-118-09373-5_13589968
axis2入门及简单例子
googleEarth入门资料和例子(VC 6.0),基本入门资料和两个例子!googleEarth入门资料和例子(VC 6.0),基本入门资料和两个例子!googleEarth入门资料和例子(VC 6.0),基本入门资料和两个例子!googleEarth入门资料和例子...
此工程为spring mvc的入门级例子,有助于刚入门spring mvc的开发人员了解spring mvc。
包含ArcGIS Desktop轻松入门,ArcGIS+++Server+++9.3+++REST基础教程.pdf, ArcSDE轻松入门.pdf三个文件,同时提供大量实用的Resources及开发实例。
可编程控制器入门与应用实例 西门子S7-200系列pdf,可编程控制器入门与应用实例 西门子S7-200系列
VHDL实用经典教程,很多平常用得到的设计实例都可以从这上面找到
Servlet入门的例子
JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门...
C 语言入门题目 经典实例 小游戏设计.zipC 语言入门题目 经典实例 小游戏设计.zipC 语言入门题目 经典实例 小游戏设计.zipC 语言入门题目 经典实例 小游戏设计.zipC 语言入门题目 经典实例 小游戏设计.zipC 语言入门...
JSP实例入门 JSP实例入门 JSP实例入门 JSP实例入门 JSP实例入门