Jwebap使用手册.docx
《Jwebap使用手册.docx》由会员分享,可在线阅读,更多相关《Jwebap使用手册.docx(13页珍藏版)》请在冰点文库上搜索。
Jwebap使用手册
JwebapUserGuide
leadyu(yu-lead@)
1介绍
Jwebap是一个用于javawebapplication的profiler工具。
它不采用JVMPI提供的特性实现监控,是一个纯粹的JAVA应用,不依赖于OS,JVM,JDK1.4以上用户都可以使用。
它的目的是希望能够安全高效的部署于生产以及测试应用系统,及时地发现应用系统中存在的性能瓶颈,以及为一些动态性很高难于调试和维护的应用系统提供帮助。
目前它主要致力于性能分析和优化方面,以后可能往其他监控方面发展(比如业务数据的监控)。
因此,组件提供基本的SDK,提供基本的分析功能,不断丰富的分析功能可以通过统一的方式以插件的形式加入Jwebap组件。
出于这些目的,作者心目中理想的监控分析工具应该具备下面几个特性:
1.1高效
组件本身必须具有很高的执行效率,对应用系统的运行带来的负担非常微小。
其实就目前来说,一般的profiler工具在一定的组件功能复杂度的情况下,需要处理非常庞大的数据量,做到真正的高效率其实是一个困难度很高的挑战,所以,一方面组件本身要足够健壮和高效,另一方面对于组件可以监控的范围也要可以配置。
(毕竟我们进行性能分析并不一定需要了解应用的全部执行细节)
1.2分析功能丰富
如果只是把庞大的应用系统运行细节暴露出来,已经远远不能满足现有的需要,根据不同视角的分析与统计变得非常必要。
并且分析的功能能够不断丰富。
(例如对于数据库的监控插件提供topMethod,topSQL之类的分析报表,甚至是动态的图形报表)
1.3跨平台
基于JAVA的组件难道还要考虑跨平台的问题吗?
回答是当然需要,起码对于profiler工具来说。
目前不少profiler通过jvmpi以及一些本地化接口实现对于JVM内部运行细节的监控。
而理想的监控工具应该是纯JAVA的,不依赖JVM和OS,否则组件的生命会变得脆弱,使用的时候也会很麻烦,我希望组件不但可以使用在测试环境,同样无缝的部署与生产应用系统。
难道让生产系统应监控工具而改变OS和JVM吗?
这明显不大可能。
1.4部署简易
希望是非常的方便,通过对动态类加载,字节码注入等技术的运用对外提供简单的部署方式,我希望就是通过几行的配置文件就能完成部署。
1.5可扩展性
前面提到,组件应该能够提供丰富的分析功能,并且这种功能可以通过插件的方式不断集成于组件之中以满足不同的需要。
所以,组件的实现中信息的采集和信息的分析必须是解耦的,一方面组件提供高效稳定的信息采集方式,另一方面组件提供基于插件的框架,能够不断扩展分析功能以满足需要,甚至这些分析功能不仅仅是性能方面,也包括业务数据的监控。
2什么是轨迹
在组件的设计中包含一个重要的概念——轨迹。
那么什么是轨迹?
●轨迹的定义
在系统中,任何程序的执行都有可能留下轨迹(数据库的调用会留下SQL轨迹,事务的轨迹,http请求会留下访问的轨迹,程序的方法执行也可以留下轨迹)。
轨迹包含了对性能分析有用的信息(比如上下文的信息,线程堆栈的信息,执行时间的信息等等),轨迹之间存在关系,比如数据库事务的轨迹和SQL的轨迹,http请求和类方法执行的轨迹之间都有一定的关系。
在性能分析中,我们可能存在几个关注点,比如数据库,远程调用,方法调用,组件等等,通过这些关注点相关程序留下的轨迹,我们进行性能分析。
●轨迹的管理
轨迹是错综复杂的,零碎地,关系模糊的,所以要真正有助于性能分析,还需要相应的支持。
所以,轨迹又需要生命周期管理,和统计管理。
轨迹的生命周期管理:
轨迹创建,运行,销毁,钝化的各个状态。
通过分析工具把有问题的轨迹(比如执行时间过长)找到,通过视图暴露出来。
轨迹的统计:
不同关注点的轨迹,存在不同的统计逻辑,通过不同的分析插件,展现给性能分析者。
●轨迹的注入
轨迹不会自己产生,我们也不可能修改系统的代码。
而我又不想像其他的一些分析工具一样,通过本地接口获取JVM的状态从而进行统计(那样就得依赖JVM,依赖OS)。
而现在有一个不错的办法摆在我们的面前,那就是采用ClassWorking。
目前,我已经实现了一个ClassEnhancer以及一个PackageEnhancer,它能够对指定的类和包进行注入。
●轨迹的生命周期
3Jwebap插件
Jwebap在模型上采用了插件的设计,从而达到对轨迹的收集管理,和分析统计的解耦。
模型如下图:
分析Component可以通过jwebap.xml定义,也可以动态的在RuntimeContext中注册。
如下:
Jwebap分为两大部分,JwebapCore和JwebapComponent。
JwebapCore实现了对Component的管理,轨迹的收集,生命周期,轨迹的磁盘钝化等等,另外,还提供了ByteCode包以实现对代码的注入,集成了模板引擎以实现视图。
JwebapComponent实现各种各样的分析功能,以插件的方式集成于Jwebap,当不需要时,随时可以去掉。
4Class-Working
Class-Working在Jwebap里面是一个很重要的基础构件。
轨迹的收集,目前都是通过字节码操作注入到目标类里面的。
Jwebap默认实现了基于ASM-2.1(asm.objectweb.org)Class-Working构件。
结合ASM的访问者模式,Jwebap的注入模型如下:
5轨迹钝化
对于不活动的轨迹(参照轨迹生命周期),轨迹容器按照一定的算法钝化轨迹到存储设备(可能是磁盘,可能是数据库)。
钝化的轨迹文件用作一些特定的统计分析。
也可以日后开发客户端分析工具,进行全量信息的分析。
6钝化文件分析
客户端钝化文件分析工具。
进行全量的数据分析。
7模版引擎
为了部署方便,Jwebap开发Web统计视图,通过集成第三方的模版引擎实现。
在集成层,Jwebap实现客户端MVC框架,模版引擎实现模版语言与容器的实现。
Jwebap通过Servlet作为输出的控制器。
8数据库监控插件
DBComponent包含两个分析器,FrequencyAnalyser和TimeFilterAnalyser。
DBComponent在启动时通过对数据库驱动或者具体的应用获取Connection的类的注入,代理Connection实现分析。
9方法监控插件
10Http请求监控插件
11部署
11.1Stepone
把Jwebap_*.*.*_*.jar放到应用的ClassPath下。
同时把依赖的jar包也放到应用的ClassPath下(参照13依赖性说明)。
11.2Steptwo
把jwebap.xml放到工程webmodule任意目录中。
11.3Stepthree
修改配置文件:
●jwebap.xml
可以根据需要配置相应的Component,目前实现的Component有:
◆HttpComponent
trace-filter-active-time:
(ms)超过该毫秒数的执行轨迹将被记录
trace-max-size:
最大记录的超时轨迹数
◆MethodComponent
trace-filter-active-time:
(ms)超过该毫秒数的执行轨迹将被记录
trace-max-size:
最大记录的超时轨迹数
detect-clazzs:
要监控的类,可以配置包名和类名,如test.*;test.Test,但不支持通配符,多个类名之间通过;分隔
◆JdbcComponent
trace-filter-active-time:
(ms)超过该毫秒数的执行轨迹将被记录
trace-max-size:
最大记录的超时轨迹数
connection-listener:
Connection监听器,可配置多个,以;分隔
driver-clazzs:
本地连接池:
可以采取配置驱动的方式,比如应用采用oracle,mysql两种数据库,驱动分别是oracle.jdbc.driver.OracleDriver,
com.mysql.jdbc.Driver,那么在DBComponent配置项中配置
driver-clazzs=oracle.jdbc.driver.OracleDriver;com.mysql.jdbc.Driver
jndi远程数据源:
可以配置Application中用于获取连接的类作为驱动(比如com.ConnectionManager)。
Jweabp启动时对这些驱动类进行注入,使得所有该类方法返回的Connection具有监控的功能。
●web.xml
增加全局参数config,指向jwebap.xml的位置
config
/WEB-INF/jwebap.xml
配置Jwebap启动类
注意:
配置在所有listener之前,以保证Jwebap最先启动,这点对于类增强很重要。
org.jwebap.core.JwebapListener
配置HttpComponent的过滤器。
PageDetectFilter
org.jwebap.plugin.http.DetectFilter
excludeUrls
/detect;/detect/*;*.js;*.jpg;*.htm;*.html;*.gif;*.png;*.css;*.swf
PageDetectFilter
/*
配置统计视图Servlet。
detect
org.jwebap.ui.controler.JwebapServlet
detect
/detect/*
12ScreenShot
12.1HttpTraces
12.2MethodTraces
12.3JdbcTraces
13依赖性说明
1)JDK1.4或以上版本
2)log4j-1.2.8.jar
3)commons-digester-1.7.jar
4)commons-beanutils.jar
5)commontemplate-0.8.1.jar
6)commons-logging.jar
配置文件有:
1)Jwebap.xml
14licence声明
Jwebap采用ApacheLicence,内部采用了ASM-2.1RC组件,出于ASM-2.1RC兼容性的考虑,把ASM-2.1RC集成到了组件内部,特此声明。
15Jwebap-SDK(开发自己的Plug-in)