线上性能检测工具之Btrace

当系统运行后,有的方法的执行时间让人不满意,需要用一些工具去查看执行的情况,可以考虑使用Btrace,使用还是比较简单的。

1、安装

首先到网上下个Btrace包吧,官方网址是:http://kenai.com/projects/btrace

解压后,把bin目录加入到环境变量中就可以使用了。

2、验证

配置环境变量后,打开一个CMD控制台:

输入命令 btrace:

Microsoft Windows [版本 6.1.7601]

版权所有 (c) 2009 MicrosoftCorporation。保留所有权利。

C:\Users\fan>btrace

Usage: btrace <options> <pid> <btrace source or .classfile> <btrace arguments>

where possible options include:

-classpath <path> Specifywhere to find user class files and annotation processors

-cp <path>        Specify where to find user class filesand annotation processors

-I <path>         Specify where to find include files

-p <port>         Specify port to which the btrace agentlistens for clients

配置就完成了。

3、开发

btrace安装好了,可以到btrace的官方帮助文档中去看语法http://kenai.com/projects/btrace/pages/UserGuide

写btrace脚本和一般的java差别不大,只是用了一些annotation来标识某个类是跟踪脚本。btrace用到的jar包基本都在下载的/btrace-bin/build文件下,将这三个包导进工程就可以使用了。【btrace脚本写好后可以不用编译,直接执行.java文件就可以】

看一个trace的例子。

package com.btrace;

import java.util.Random;

import java.util.Arrays;

/**

* 简单的Btrace查看的示例,主要是方法的运行时间和内存使用

* @author 范芳铭

*/

public class EasyBtraceTest {

private Object[] elements;

private int size = 0;

private static final intDEFAULT_INI_CAPACITY = 16;

public byte[] placeHolder =new byte[64 * 1024]; //占位符

public EasyBtraceTest(){

elements = new Object[DEFAULT_INI_CAPACITY];

}

public static voidmain(String[] args) throws Exception {

while (true) {

Random random =new Random();

execute(random.nextInt(4000));

}

}

public static Integerexecute(int sleepTime) {

try {

Thread.sleep(sleepTime);

if (sleepTime %2 == 0){

System.out.println("正在执行");

EasyBtraceTesttest = new EasyBtraceTest();

test.push(test);

}

} catch (Exception e) {

}

System.out.println("sleeptime is=>" + sleepTime);

return 0;

}

//用于占用内存

public void push(Object e){

if (elements.length ==size )

elements=Arrays.copyOf(elements, 2 * size + 1 );

elements[size++] = e;

}

}

4、btrace脚本

我要监控execute方法执行的时间,以及使用的内存的情况

btrace脚本如下:

package com.btrace;

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.BTraceUtils.Sys;

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.OnTimer;

import com.sun.btrace.annotations.ProbeClassName;

import com.sun.btrace.annotations.ProbeMethodName;

import com.sun.btrace.annotations.TLS;

@BTrace

public class TraceEasyBtrace {

@TLS

private static long startTime =0;

@OnMethod(clazz ="com.btrace.EasyBtraceTest", method = "execute")

public static voidstartMethod(){

startTime =timeMillis();

}

@OnMethod(clazz ="com.btrace.EasyBtraceTest", method = "execute", location [email protected](Kind.RETURN))

public static voidendMethod(){

println(strcat("theclass method execute time=>", str(timeMillis()-startTime)));

println("-------------------------------------------");

}

@OnMethod(clazz ="com.btrace.EasyBtraceTest", method = "execute", location [email protected](Kind.RETURN))

public static voidtraceExecute(@ProbeClassName String name,@ProbeMethodName String method,intsleepTime){

println(strcat("theclass name=>", name));

println(strcat("the classmethod=>", method));

println(strcat("theclass method params=>", str(sleepTime)));

}

@OnTimer(4000)

public static void printMem() {

println("Heap:");

println(Sys.Memory.heapUsage());

println("Non-Heap:");

println(Sys.Memory.nonHeapUsage());

}

}

上面源码有几点注意的:

1、 @BTrace 这个annotation表明这个类是btrace脚本,

2、@OnMethod(clazz = " com.btrace.EasyBtraceTest ",method = "execute")

中clazz标明要监控那个类,也可以用正则匹配的方式,method标明要监控类的哪个方法

5、运行和具体使用

代码写好了,将EasyBtraceTest程序跑起来,看到每个几秒控制台就会有信息输出:

sleep time is=>3774

sleep time is=>1883

sleep time is=>3863

….

说明程序已经在跑了。

用TraceEasyBtrace.java这个脚本来监控EasyBtraceTest

前提条件:

两个目录:

TraceEasyBtrace.java  所在的目录,在D:\develop\eclipse\work\performance\src\com\btrace下

JAVA的bin目录下,用JPS查看进程id(应用每次运行可能都会变动,要在本机运行)

我的目录在:

C:\Users\fan>cd C:\Program Files\Java\jdk1.6.0_25\bin

获得运行的JAVA的进程ID;

进入命令行:

Microsoft Windows [版本 6.1.7601]

版权所有 (c) 2009 MicrosoftCorporation。保留所有权利。

C:\Users\fan>cd C:\Program Files\Java\jdk1.6.0_25\bin

C:\Program Files\Java\jdk1.6.0_25\bin>jps

7364 EasyBtraceTest

2268

5392

6816 Jps

C:\Program Files\Java\jdk1.6.0_25\bin>

其中,7364 EasyBtraceTest
就是我们这个应用的PID。

这时候在TraceEasyBtrace.java 所在的目录下运行命令btrace 7364 TraceEasyBtrace.java,结果如下:

Microsoft Windows [版本 6.1.7601]

版权所有 (c) 2009 MicrosoftCorporation。保留所有权利。

C:\Users\fan>cd C:\Program Files\Java\jdk1.6.0_25\bin

C:\Program Files\Java\jdk1.6.0_25\bin>jps

7364 EasyBtraceTest

2268

5392

6816 Jps

C:\Program Files\Java\jdk1.6.0_25\bin>d:

D:\>cd D:\develop\eclipse\work\performance\src\com\btrace

D:\develop\eclipse\work\performance\src\com\btrace>btrace 7364TraceEasyBtrace.java

Heap:

init = 0(0K) used = 1005544(981K) committed = 5177344(5056K) max =66650112(65088K)

Non-Heap:

init = 12746752(12448K) used = 5666640(5533K) committed = 13303808(12992K)max = 100663296(98304K)

the class name=>com.btrace.EasyBtraceTest

the class method=>execute

the class method params=>3011

the class method execute time=>3012

-------------------------------------------

the class name=>com.btrace.EasyBtraceTest

the class method=>execute

the class method params=>2849

the class method execute time=>2850

可以看到每当execute方法执行时,就会打印出一行信息。打印出了类名,方法名,参数,以及这个方法执行的时间。以及内存的使用情况;

这就是一个非常简单的btrace监控,还可以用于数据库执行语句的监控,多线程的监控,WebService的监控等。

时间: 2024-11-08 23:12:31

线上性能检测工具之Btrace的相关文章

[Linux 性能检测工具]TOP

TOP NAME 显示linux任务 语法 top -hv | -abcHimMsS -d delay -n iterations -p pid [, pid ...] 描述 top程序提供了系统实时信息,显示系统的总体信息和一组由内核管理的任务,系统总体信息的类型,和任务列表上类型,顺序和大小信息,都可以由用户配置,重启机制就有效. 提供了有限的一些交互接口让用户配置,涵盖了操作的每个方面.当top引用这个文件,可以随意命名top程序,然后当读写一个配置文件的时候新的名称会被引用到top的显示

性能检测工具介绍-Linux系统命令行

本文介绍的关于Linux自带命令进行性能检测的介绍,详细介绍这些linux自带的工具的使用. 一.uptime uptime命令的显示结果包括服务器已经运行了多长时间,有多少登陆用户和对服务器性能的总体评估(load average).load average值分别记录了上个1分钟,5分钟和15分钟间隔的负载情况,load average不是一个百分比,而是在队列中等待执行的进程的数量.如果进程要求CPU时间被阻塞(意味着CPU没有时间处理它),load average值将增加.另一方面,如果每

Sql性能检测工具:Sql server profiler和优化工具:Database Engine Tuning Advisor

原文:Sql性能检测工具:Sql server profiler和优化工具:Database Engine Tuning Advisor 一.工具概要 ? ? 数据库应用系统性能低下,需要对其进行优化, ? ? 如果不知道问题出在哪里,可以使用性能检测工具sql server profiler. ? ? 如果知道问题出在哪里,却不知道如何解决,可以使用数据库引擎优化顾问Database Engine Tuning Advisor 二.sql server profiler 功能:检测到数据库中的

好用的性能检测工具 - Glances

平常我经常使用 htop 工具来进行对主机进行性能检测.但是它只能对 进行进行管理.并简要显示 进程和cpu和内存使用信息: glances 是比较好的性能检测工具.相比较htop还能显示 disk io net 等更多信息.并且还有web ui和ipc 模式.当我们有多台机器的时候,使用此工具极为方便. glances 工具在fedora上可以使用 yum 安装.具体使用信息 可以使用man手册进行查看.也可以使用 h 进行glances 后查看. 使用模式: glances -1 直接进入命

Linux 性能检测工具Vmstat命令

Linux 性能检测工具Vmstat命令提供了对进程.内存.页面I/O块和CPU等信息的监控,vmstat可以显示检测结果的平均值或者取样值,取样模式可以提供一个取样时间段内不同频率的监测结果. Linux 性能检测工具Vmstat命令process(procs)r:等待运行时间的进程数量b:处在不可中断睡眠状态的进程w:被交换出去但是仍然可以运行的进程,这个值是计算出来的 ·Linux 性能检测工具Vmstat命令memoryswpd:虚拟内存的数量free:空闲内存的数量buff:用做缓冲区

[转帖]Java性能检测工具-记录一次通过jstack排查Linux服务器CPU占用率很高的实践

Java性能检测工具-记录一次通过jstack排查Linux服务器CPU占用率很高的实践 https://www.jianshu.com/p/d4e31301ba2e 一.问题描述 Linux服务器的配置是4核16G,将war包部署到tomcat后,启动tomcat,发现内存占用率不高,但是CPU一直高达100%:浏览器输入相关url也无法访问该项目,且tomcat的进程一直存在,程序的配置什么的都没问题啊,一头雾水......通过top命令查看服务器的性能状况如下: [[email prote

线上性能问题初步排查方法

文章出处http://ifeve.com/find-bug-online/ 有时候有很多问题只有在线上或者预发环境才能发现,而线上又不能Debug,所以线上问题定位就只能看日志,系统状态和Dump线程,本文只是简单的介绍一些常用的工具,帮助定位线上问题. 问题定位 1: 首先使用TOP命令查看每个进程的情况,显示如下: top - 22:27:25 up 463 days, 12:46, 1 user, load average: 11.80, 12.19, 11.79 Tasks: 113 t

linux服务器性能检测工具nmon使用

今天介绍一款linux系统服务器性能检测的工具-nmon及nmon_analyser (生成性能报告的免费工具),亲测可用. 一.介绍 nmon 工具可以帮助在一个屏幕上显示所有重要的性能优化信息,并动态地对其进行更新.这个高效的工具可以工作于任何哑屏幕.telnet 会话.甚至拨号线路.另外,它并不会消耗大量的 CPU 周期,通常低于百分之二.在更新的计算机上,其 CPU 使用率将低于百分之一. 使用哑屏幕,在屏幕上对数据进行显示,并且每隔两秒钟对其进行更新.然而,您可以很容易地将这个时间间隔

几款前端性能检测工具

在线网站类: WebPageTest 说明: 在线的站点性能评测网站,地址http://www.webpagetest.org/ 补充: 其实这网站也是个开源项目,所以支持自己搭建一个内部的测试站点 ShowSlow 说明: showslow是yslow的数据收集与展示平台http://www.showslow.com/,它是一个开源的php项目,可以用来与firefox的yslow插件.page speed插件或者dynatrace通信,收集插件或程序所发送过来的信息并集中展示.只需要在dyn