- 浏览: 1072266 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (639)
- 服务器配置篇 (58)
- hibernate篇 (14)
- spring篇 (33)
- struts篇 (28)
- JS篇 (46)
- 其他技术篇 (46)
- 数据库集群配置 (6)
- JAVA基础相关 (48)
- 分布式框架HadHoop的应用 (2)
- FLEX篇 (8)
- SQLSERVER技术 (32)
- Android学习 (13)
- amchart学习笔记 (1)
- openfire+smark搭建即时通讯 (9)
- Linux学习 (18)
- Oracle数据库 (15)
- 网站优化技术 (12)
- mysql数据库 (2)
- 项目学习总结 (18)
- 工具类(JAVA) (12)
- 工具类(JS) (2)
- 设计模式 (10)
- Lucene学习 (24)
- EJB3学习 (6)
- Sphinx搜索引擎 (3)
- 工作中用到的软件小工具 (5)
- .NET (49)
- JAVA 连接SQLSERVER2008步骤 (1)
- MongoDB (19)
- Android手机开发 (3)
- Maven (6)
- vue (9)
- Shiro (4)
- mybatis (3)
- netty框架 (1)
- SpringCloud (3)
- spring-cloud (7)
- Git (1)
- dubbo (2)
- springboot (13)
- rocketmq (1)
- git学习 (2)
- kafka服务器 (2)
- linux (10)
- WEB系统辅助项目 (1)
- jenkins (2)
- docker (4)
- influxdb (3)
- python (2)
- nginx (1)
最新评论
-
jiangfuofu555:
这样数据量大,效率怎么样?
sqlserver 实现分页的前台代码 以及后台的sqlserver语句 -
w156445045:
博主请问下,如何做到实时的刷新呢,
另外我后台是Java 谢谢 ...
web 版本的汽车仪表盘,非常好看。还有各种图形 -
jackyin5918:
<transportConnector name=&qu ...
ActiveMQ的activemq.xml详细配置讲解 -
握着橄榄枝的人:
你这个不是spring1.x的吧
spring1.x使用AOP实例 -
xiaophai:
全乱套了!
openfire+spark搭建完美的及时通讯
Jwebap User Guide
leadyu (yu-lead@163.com)
1 介绍
Jwebap是一个用于java web application 的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 什么是轨迹
在组件的设计中包含一个重要的概念——轨迹。那么什么是轨迹?
l 轨迹的定义
在系统中,任何程序的执行都有可能留下轨迹(数据库的调用会留下SQL轨迹,事务的轨迹,http请求会留下访问的轨迹,程序的方法执行也可以留下轨迹)。
轨迹包含了对性能分析有用的信息(比如上下文的信息,线程堆栈的信息,执行时间的信息等等),轨迹之间存在关系,比如数据库事务的轨迹和SQL的轨迹,http请求和类方法执行的轨迹之间都有一定的关系。在性能分析中,我们可能存在几个关注点,比如数据库,远程调用,方法调用,组件等等,通过这些关注点相关程序留下的轨迹,我们进行性能分析。
l 轨迹的管理
轨迹是错综复杂的,零碎地,关系模糊的,所以要真正有助于性能分析,还需要相应的支持。所以,轨迹又需要生命周期管理,和统计管理。
轨迹的生命周期管理:轨迹创建,运行,销毁,钝化的各个状态。通过分析工具把有问题的轨迹(比如执行时间过长)找到,通过视图暴露出来。
轨迹的统计:不同关注点的轨迹,存在不同的统计逻辑,通过不同的分析插件,展现给性能分析者。
l 轨迹的注入
轨迹不会自己产生,我们也不可能修改系统的代码。而我又不想像其他的一些分析工具一样,通过本地接口获取JVM的状态从而进行统计(那样就得依赖JVM,依赖OS)。而现在有一个不错的办法摆在我们的面前,那就是采用ClassWorking。目前,我已经实现了一个ClassEnhancer以及一个PackageEnhancer,它能够对指定的类和包进行注入。
l 轨迹的生命周期
3 Jwebap插件
Jwebap在模型上采用了插件的设计,从而达到对轨迹的收集管理,和分析统计的解耦。模型如下图:
分析Component可以通过jwebap.xml定义,也可以动态的在RuntimeContext中注册。如下:
Jwebap分为两大部分,Jwebap Core和Jwebap Component。
Jwebap Core实现了对Component的管理,轨迹的收集,生命周期,轨迹的磁盘钝化等等,另外,还提供了ByteCode包以实现对代码的注入,集成了模板引擎以实现视图。
Jwebap Component实现各种各样的分析功能,以插件的方式集成于Jwebap,当不需要时,随时可以去掉。
4 Class-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 方法监控插件
10 Http请求监控插件
11 部署
11.1Step one
把Jwebap_*.*.*_*.jar放到应用的ClassPath下。同时把依赖的jar包也放到应用的ClassPath下(参照13依赖性说明)。
11.2Step two
把jwebap.xml放到工程web module任意目录中。
11.3Step three
修改配置文件:
l jwebap.xml
可以根据需要配置相应的Component,目前实现的Component有:
u HttpComponent
trace-filter-active-time: (ms)超过该毫秒数的执行轨迹将被记录
trace-max-size: 最大记录的超时轨迹数
u MethodComponent
trace-filter-active-time: (ms)超过该毫秒数的执行轨迹将被记录
trace-max-size: 最大记录的超时轨迹数
detect-clazzs: 要监控的类,可以配置包名和类名,如test.*;test.Test,但不支持通配符,多个类名之间通过;分隔
u 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具有监控的功能。
l web.xml
增加全局参数config,指向jwebap.xml的位置
<context-param> <param-name>config</param-name> <param-value>/WEB-INF/jwebap.xml</param-value> </context-param> |
配置Jwebap启动类
注意:配置在所有listener之前,以保证Jwebap最先启动,这点对于类增强很重要。
<listener> <listener-class>org.jwebap.core.JwebapListener</listener-class> </listener> |
配置HttpComponent的过滤器。
<filter> <filter-name>PageDetectFilter</filter-name> <filter-class>org.jwebap.plugin.http.DetectFilter</filter-class> <init-param> <param-name>excludeUrls</param-name> <param-value>/detect;/detect/*;*.js;*.jpg;*.htm;*.html;*.gif;*.png;*.css;*.swf</param-value> </init-param> </filter> <filter-mapping> <filter-name>PageDetectFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> |
配置统计视图Servlet。
<servlet> <servlet-name>detect</servlet-name> <servlet-class>org.jwebap.ui.controler.JwebapServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>detect</servlet-name> <url-pattern>/detect/*</url-pattern> </servlet-mapping> |
12 ScreenShot
12.1 Http Traces
12.2 Method Traces
12.3 Jdbc Traces
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
14 licence声明
Jwebap采用Apache Licence,内部采用了ASM-2.1RC组件,出于ASM-2.1RC兼容性的考虑,把ASM-2.1RC集成到了组件内部,特此声明。
通过网站的监视,可以查看到网站有哪些链接没有关闭,可以追踪网站被访问的记录等信息。
- Jwebap.rar (1.4 MB)
- 下载次数: 21
发表评论
-
java spring整合websocket教程
2018-03-30 14:30 689在javaweb项目开发中,我们经常可能需要websocke ... -
myeclipse 项目之间类进行引用
2014-11-19 15:54 966相关解决方案: eclipse的Web项目引用方式:(其实相 ... -
myeclipse8 每次启动内存都不够用的解决方案
2014-11-11 15:34 775最近可能由于公司项目大了,启动MyEclipse后经常提示 ... -
web项目集成log4j
2014-11-06 12:39 725Log4j基本使用方法 Log4j由三个重要的组件构成:日 ... -
使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务
2011-10-25 14:09 1531RESTful Web 服务简介 REST 在 2000 年 ... -
确定操作系统位计数(64位还是32位(X86))
2011-09-30 08:36 1251在此部分查找计算机 ... -
解决“无法删除 指定的文件名无效或太长”的问题
2011-09-16 14:07 2525解决“无法删除 指定的文件名无效或太长”的问题 ... -
网站应用通过139邮箱发送短信做到日志提醒功能
2011-09-15 09:36 1825首先在139注册一个邮箱,然后再邮箱设置中设置收到邮件通过短信 ... -
javamail发送邮件遇到的问题
2011-09-15 09:32 1208今天在用myeclipse写mial功能的时候,想调试一下程序 ... -
http协议的学习笔记
2011-03-01 10:56 1692HTTP请求行 格式:请求 ... -
Logback用户手册中文版.pdf
2011-02-14 16:57 2030Logback用户手册中文版.pdf -
JAVA编写的预警系统
2011-02-10 11:00 6341预警系统 <!-- start content --& ... -
Mediawiki 简明架设指南
2011-02-10 10:03 4662在 Debian/Linux 下 1. 安装程序 sh ... -
xsl 常用.jsp
2011-02-10 09:28 1626现在用的都是有规分律数据, 特殊的数据用XSL. DOM4J ... -
SVN 入门指南
2011-01-14 11:17 1005SVN 入门指南 -
FreeMaker中文手册
2011-01-14 11:15 1051FreeMaker中文手册 -
查看某个网段具体哪些IP没有被使用的命令
2010-11-29 09:01 2907通过运行cmd然后在DOS命令下运行下面程序,表示查看192. ... -
xsl 取数据的时候,当用for-each循环取得数据,怎么取第一行的数据
2010-11-08 11:35 2361需求,打印表格的时候,用for-each 来取得数据,当取到第 ... -
项目过程中,对于绝对路径和相对路径的总结
2010-09-11 09:20 12471.基本概念的理解 绝对路径:绝对路径就是你的主页上的文 ... -
mysql经典语句
2010-09-09 18:18 1257show databases;show tables from ...
相关推荐
- HSPICE User Guide: Simulation and Analysis, version C-2009.03 - HSPICE User Guide: RF Analysis, version C-2009.03 - HSPICE User Guide: Signal Integrity, version C-2009.03 - HSPICE User Guide: ...
VCS各版本User Guide
2. **选项和配置**:User Guide详细介绍了如何配置VCS,包括设置编译选项、仿真选项和性能优化参数。这涵盖了如何控制仿真流程,如编译、链接、运行和后处理,以及如何定制报告和日志输出。 3. **调试与分析**:VCS...
synopsys EDA工具Fusion Compiler user guide
VC Spyglass CDC User Guide 2022
Verdi User Guide and Tutorial.pdf April 1, 2009 350页,全英文高清晰
《Skill User Guide中文版》是针对技能学习者的指导性文档,旨在帮助初学者掌握技能的基本概念和使用方法。这份文档的翻译为中文,使得国内的读者能够更方便地理解和应用其中的知识,推动了技能学习的普及和资源共享...
《Design Compiler 用户指南》是由Synopsys公司出版的官方文档,版本为F-2011.09-SP2,发布日期为2011年12月。该指南属于用户手册系列,详细介绍了Design Compiler这款EDA(电子设计自动化)软件的使用方法。...
pt_user_guide.pdf 文件是 PrimeTime 和 PrimeTime SI 软件的用户手册,涵盖了软件的安装、配置、使用等方面的详细指南,并包含了版权信息、免责声明、商标信息、Destination Control Statement 等重要信息。
总的来说,"vcs 2018.09 user guide"是一份详尽的文档,涵盖了VCS仿真器的所有关键功能和用法,是设计者进行高效Verilog验证的重要参考资料。通过深入理解和应用其中的知识点,设计团队可以加速其设计验证过程,提高...
MMWAVE SDK User Guide是Texas Instruments(_TI)推出的SDK配置文件用户指南。该指南旨在帮助开发者快速了解和掌握MMWAVE SDK的使用方法和配置方式。 系统概述 MMWAVE SDK是TI为其mmWave雷达产品系列提供的软件...
CCS学习入门资料 ---CCS user guide ---使用CCS进行DSP编程(一) ---使用CCS进行DSP编程(二) ---使用CCS进行DSP编程(三) ---使用CCS进行DSP编程(四)
Virtuoso SpectreRF Simulation Option User Guide,include SpectreRF Analysis ,SpectreRF simulation form reference, setting up for the examples........ 各种仿真都有说明,还有实例
VC Spyglass Lint User Guide 2022
标题“Liberty User Guide”和描述“it describes the all the commands used in liberty”表明,这是一本用于Liberty的用户指南,它详尽描述了在Liberty中使用的所有命令。标签“liberty user guide”也证实了这...
"VCS_User_Guide.pdf" VCS用户手册是 Synopsis 公司出品的一份重要的用户指南,旨在帮助用户更好地使用VCS(Verification Continuum)工具,实现IC设计的自动化验证。该手册涵盖了VCS的使用指南、功能特点、配置...
标题为"SKILL Language User Guide",表明该文档是一本关于SKILL语言的用户指南。SKILL语言由Cadence公司开发,是一种主要用于集成电路设计自动化应用的脚本语言。用户指南很可能涉及SKILL语言的基础知识、语法结构...
1. **系统设置**:指导用户如何配置Genus工具以适应特定的设计需求,包括编译选项、目标设备库、时钟约束等。 2. **输入与输出文件管理**:详细说明了输入的网表文件、约束文件、宏模型等的格式和使用,以及生成的...
- **配置环境变量**:正确设置环境变量可以帮助提高程序的兼容性和稳定性。 - **安装SKILL语言编译器**:根据操作系统选择合适的编译器版本进行安装。 #### 六、节名及其含义 文档按照不同的主题进行了章节划分,每...