- 浏览: 375081 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
真的全站唯一:
描述的能不能准确一点,我也以为bigDecimal性能比dou ...
【性能】Java BigDecimal和double性能比较 -
zhanggang807:
学习到了。。以后会考虑往这方面设计
【java规范】Java spi机制浅谈 -
Xiong506:
xiyuan1025 写道你这是在linux下吗,我在linu ...
[监控]Btrace监控简单笔记 -
Xiong506:
xiyuan1025 写道你这是在linux下吗,我在linu ...
[监控]Btrace监控简单笔记 -
Bll:
找不到实现类
【java规范】Java spi机制浅谈
前阵子看了公司网站的一个cache 命中率统计的btrace监控脚本,感觉这个玩意功能挺强大,对应用监控有很大实践意义。也顺便把btrace简单学习了一下,未涉及原理方面的内容,只是使用层面的东西,简单笔记总结一下。
安装
Linux下:
在http://kenai.com/projects/btrace下载btrace-bin.tar.gz,并解压,设置环境变量:
export BTRACE_HOME=/home/yblin/workspace/btrace/btrace-bin export PATH=$BTRACE_HOME/bin:$PATH
敲入btrace命令看到提示,说明安装正常。
简介
是一个安全动态的监控工具。通过动态的修改运行时的java字节码,可以在运行时代码中插入监控行为。
几个概念
探测点
(probe point):用于表示需要被探测监控的位置或者事件。
探测行为
(action):探测点触发时进行的探测行为。如计时等等。
探测方法
(method):当探测点触发的时候,需要触发的探测行为所定义在的那个方法。
代码结构和例子
Btrace代码结构(1.2之后static可以去掉
)
//annotation defined here public static void trace(){ //actions defined here }
注:以上是一个探测方法,方法的注解annotation用来指示探测点,即要探测的位置;方法体的内容,是探测点触发之后的探测行为。
以下是一个例子:
待测试代码:
package btrace.test; public class MyBtraceTest { public void execute() { int i = (int) (Math.random() * 1000); System.out.println(i); try { Thread.sleep(Math.abs(i)); } catch (InterruptedException e) { e.printStackTrace(); } } public void loopExcute() { while (true) { execute(); } } public static void main(String[] args) { MyBtraceTest m = new MyBtraceTest(); m.loopExcute(); } }
要测试待测代码里excute方法的执行时间,并每次打出方法栈,监控代码如下:
package btrace.test; import static com.sun.btrace.BTraceUtils.jstack; import static com.sun.btrace.BTraceUtils.println; 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 TraceMethodTime { @TLS static long beginTime; @OnMethod(clazz = "btrace.test.MyBtraceTest", method = "execute") public static void traceExecuteBegin() {// 在方法btrace.test.MyBtraceTest.execute()执行之前进行监控。 println("method start!"); beginTime = timeMillis(); // 监控行为是记录一个开始时间。 } // OnMethod代表运行一个方法的时候进行监控,location @Location(Kind.RETURN)代表在方法返回的时候触发监控行为。 @OnMethod(clazz = "btrace.test.MyBtraceTest", method = "execute", location = @Location(Kind.RETURN)) public static void traceExcute() { // 监控行为是根据开始时间计算出方法运行时间。 println(strcat(strcat("btrace.test.MyBtraceTest.execute time is:", str(timeMillis() - beginTime)), "ms")); println("method end!"); jstack();//打印方法栈 } }
先运行 MyBtraceTest,通过jps拿到进程id,再通过
btrace 11059 btrace/test/TraceMethodTime.java
命令进行监控。可以得到结果:
参考
Btrace的注解方式有很多,意义各不同,同时也有很多现成例子,能帮助实现各种监控场景。
参考官网:http://kenai.com/projects/btrace/pages/UserGuide
评论
5 楼
Xiong506
2017-07-18
xiyuan1025 写道
你这是在linux下吗,我在linux下使用btrace,总是提示
Invalid path 9215 specified: 2/No such file or directory
执行命令为btrace 9215 BTraceConnection.java
Invalid path 9215 specified: 2/No such file or directory
执行命令为btrace 9215 BTraceConnection.java
解决了,原来系统里原来就有btrace命令
用which btrace可以看到其位于/usr/bin/btrace,这个不是我们要用的。
所以用绝对路径运行我们下载的btrace就好,例如:
/usr/local/btrace-1.3.9/bin/btrace 13366 /ftp/btrace/HelloWorldScript.java
4 楼
Xiong506
2017-07-18
xiyuan1025 写道
你这是在linux下吗,我在linux下使用btrace,总是提示
Invalid path 9215 specified: 2/No such file or directory
执行命令为btrace 9215 BTraceConnection.java
Invalid path 9215 specified: 2/No such file or directory
执行命令为btrace 9215 BTraceConnection.java
........这个我也遇到了,大家都解决了吗?
3 楼
renzhengzhi
2016-07-18
xiyuan1025 写道
你这是在linux下吗,我在linux下使用btrace,总是提示
Invalid path 9215 specified: 2/No such file or directory
执行命令为btrace 9215 BTraceConnection.java
Invalid path 9215 specified: 2/No such file or directory
执行命令为btrace 9215 BTraceConnection.java
我也遇到这个问题了,请问解决了嘛?
2 楼
淘宝境界哥
2015-09-29
不错,性能排查利器
1 楼
xiyuan1025
2015-07-17
你这是在linux下吗,我在linux下使用btrace,总是提示
Invalid path 9215 specified: 2/No such file or directory
执行命令为btrace 9215 BTraceConnection.java
Invalid path 9215 specified: 2/No such file or directory
执行命令为btrace 9215 BTraceConnection.java
发表评论
-
Xml ResourceBundle简单实现
2012-04-17 21:45 4364ResourceBundle主要是用于和本地语言环境相关的一些 ... -
【maven】多子模块maven模板工程archetype创建过程
2012-04-02 20:55 17574最近项目里需要创建一 ... -
【java基础】如何设计java应用程序的平滑停止
2012-03-05 23:44 10924java应用程序退出的触发机制有: 1.自动结束:应用没有存 ... -
【java并发】juc Executor框架详解
2012-02-26 13:55 12374Executor 框架是 juc 里提供的线程池的实现。 ... -
【java并发】juc高级锁机制探讨
2012-02-23 00:52 8510最近在看一些j ... -
【java并发】基于JUC CAS原理,自己实现简单独占锁
2012-02-14 13:47 7766synchronized的基本原理回 ... -
[NoSQL]MongoDB初体验
2012-01-05 16:06 3926因为未来业务发展的一 ... -
【JVM】HotSpot JVM内存管理和GC策略总结
2011-12-13 22:05 15878JVM的相关知识是学习java ... -
【性能】JDBC PreparedStatement和连接池PreparedStatement Cache学习记录
2011-12-08 17:20 16759之前看JDBC规范的时候对PreparedStatement只 ... -
32位机器下的一个java.lang.OutOfMemoryError错误分析
2011-10-17 11:19 2546昨天在本人windows机器( ... -
DBCP数据源配置项记录
2011-09-01 20:22 2934网站最近发生了数据库连接爆掉的问题。排查了下各个应用存在 ... -
【性能】Java BigDecimal和double性能比较
2011-08-28 20:06 14109我们知道 java 里面有个 BigDecimal ... -
【Spring】IOC容器并发条件下,可能发生死锁
2011-08-28 17:07 68331.背景 上周在生产环境应用启 ... -
JDK7 AIO 初体验
2011-08-17 19:20 2534JDK7 AIO初体验 JDK7已经releas ... -
如果要用java实现算法,一定慎用递归
2011-04-06 20:41 12823现象 : 递归是我们很经典的一种算法实现,可以很好的 ... -
java日志,需要知道的几件事(commons-logging,log4j,slf4j,logback)
2011-02-28 17:12 46237java日志,需要知道的几件事 如果对于comm ... -
JVM问题诊断常用命令:jinfo,jmap,jstack
2010-08-17 17:55 123951.jinfo 描述:输出给定 java ... -
java 浮点数为什么精度会丢失
2010-07-15 22:30 4838由于对float或double 的使用不当,可能会出现精度 ... -
一个枚举类的方法设计
2010-06-21 15:28 1647public enum ActionType { A ... -
java内部字符编码浅析
2010-06-07 21:43 6794java内部字符编码浅析 本周遇到一个 ...
相关推荐
利用笔记本监控 利用笔记本监控 利用笔记本监控 利用笔记本监控
笔记本电脑CPU温度监控工具笔记本电脑CPU温度监控工具
笔记本温度监控笔记本温度监控笔记本温度监控
大学生宿舍笔记本防盗监控,有效防止偷盗,阻止失窃!
笔记本风扇散热必备笔记本风扇散热必备笔记本风扇散热必备
BatteryCat(桌面笔记本电池监控),一款小巧,界面简洁,没有任何广告的免费软件,主要用途是监控电池的电量和其他数据等 简述 你可以用它来查看您当前的电池电量和最大的电池电量,或者如果您的充电器连接,并且电池...
ganglia监控软件的笔记
笔记本内存.CPU温度监控工具 运行环境WINXP.WIN2000.WIN98 显示笔记本CPU温度工具, 有温度过高报警功能!定时关机功能!可以查看内存使用情况.CPU即时主频情况! BOCC-2009.rar 打开程序直接小化到托盘,不显示主界面!...
这个文件湘西描述了用C++语言编写的远程监控系统的整个过程,有兴趣的朋友可以参考一下,里面重点是附加了说明和结构图,内容比较丰富。
实时监控电池电量,避免笔记本电脑自动关机
双击即可运行,功能为在电脑锁屏后,自动打开摄像头开始监控,电脑解锁后结束监控并将视频保存在D:/Monitor文件夹。为节省空间,拍摄画质较低,1小时视频约80M。
使用C#编写简易监控软件,功能包括实时监控,实时拍照,实时录像功能,所以录制视频和图片文件保存在程序本地debug文件根目录下。本人只是抛砖引玉,希望各位后续可以继续有更好的方法来进行编写此类软件。
笔记本内存.CPU温度监控工具 运行环境WINXP.WIN2000.WIN98 显示笔记本CPU温度工具, 有温度超过63度报警功能!定时关机功能!可以查看内存使用情况.CPU即时主频情况! BOCC-2009.rar 打开程序直接小化到托盘,不显示主...
监控笔记本电池的状况,保护电池寿命,适合windowsXP,windows7
笔记本风扇监控软件,有了它你可以随时了解你的机器内都温度情况!
一个简单的,易于使用笔记本电脑的电池监控软件BatteryCare,它可以监控电池的循环放电,并有助于提高它的自主性和改善电池寿命
笔记本电池电力恢复监控软件,有效提升笔记本电池 的使用寿命。。。
监控笔记本 谁动赶紧通知我.docx