`
leadyu
  • 浏览: 51539 次
  • 性别: Icon_minigender_1
  • 来自: 广州,福州
文章分类
社区版块
存档分类
最新评论

Jwebap项目(四)——性能监控工具Jwebap: 0.5.8版本发布

阅读更多
一直想写一篇关于Jwebap(jwebap.sourceforge.net)项目的介绍文章,鉴于0.5.8版本的发布,我整理了下发表出来,希望大家感兴趣。

引用
背景
最初,在06年底由于要帮助几个大型项目进行性能上的优化,有了开发一个专用于profiling组件的想法,于是有了Jwebap,慢慢的到了07年6月份开始有了最初的方案,在11月终于在sourceforge上发布了第一个版本。

Jwebap能带来什么?
Jwebap是一个用于J2EE工程(EJB以及WebModule系统)进行性能监控的组件,它有几个特点:

1)基于ASM实现类的静态增强,可以无缝的部署于J2EE系统,对系统的开销几乎可以忽略

2)部署和使用非常的简单,整个Jwebap的部署只需要部署jwebap_core_**.jar以及需要使用的各种plugin_**.jar,然后配置jwebap.xml和web.xml就可以完成所有的部署,比起绝大多数的profiling容易的多。

同时Jwebap提供Web Console进行整个Jwebap的管理和数据展现。在API层提供一套默认的视图框架供plugin开发者使用,可以只用Jar包就开发出相当漂亮的Web界面。

3)Jwebap的开发分为两个部分Jwebap-core部分,Jwebap-plugin部分。core部分基于jdk14提供了类静态增强,轨迹生命管理,Plugin管理,视图框架等等,在这个基础上开发plugin。我觉得,好的profiling应该能够根据不同的人群按需使用,同时在功能不断复杂和强大的过程中仍然能够保证较轻的架子。

目前,0.5.8提供了基于jdk14的三个plugin:method监控,jdbc监控,http监控。这些可以算是基于plugin架构开发的示例。以后会开发更多的plugin,比如memory_monitor_plugin。甚至可以基于一些专属平台开发功能更强的插件。当然,Jwebap也可以不仅仅停留在profiling,日后,可以基于测试人员和质量保证,开发人员等方面开发适用的plugin,做到按需分配。


Jwebap的部署

Jwebap的部署相当简单,0.5.8版本提供了一个把plugin和core打在一起的包:jwebap_0.5.8_all.jar。然后对于jwebap.xml和web.xml的配置可以参看doc目录下的User-Guide。目前,0.5.8版本能够做到的功能有:

Jdbc监控:可以监控J2EE系统的所有Jdbc调用,包括Jndi数据源,可以过滤SQL时间,由哪些程序调用,哪些连接泄露。

Method监控:可以通过配置Method Plugin的'detect-class'参数,配置多个想要监控的包或类,Jwebap Console就可以跟踪这些类的方法执行,进行时间过滤,可以统计开销,和方法的调用堆栈,方法打开了多少Jdbc连接等等。

Http监控:可以监控http请求,进行时间过滤,可以进行请求的开销统计,请求打开了多少Jdbc连接等等。


贴几张示例图,有兴趣的朋友可以下载试用(jwebap.sourceforge.net),欢迎在这里进行交流:
  • 描述: Jdbc Traces 1
  • 大小: 148.2 KB
  • 描述: Jdbc Traces 2
  • 大小: 118.4 KB
  • 描述: Method Traces
  • 大小: 98.6 KB
分享到:
评论
72 楼 xlongbuilder 2008-03-06  
数据库连接信息 最多能显示多少条 有限制吗
我这1300 条 就不再增加了
71 楼 heaven 2008-03-06  
其实你可以用appfuse或者spring的jpetstore部署一个验证一下就好,配置基本一样,而且这个是比较典型的应用,很能说明问题,
70 楼 xlongbuilder 2008-03-06  
driver-clazzs 是 org.apache.commons.dbcp.BasicDataSource 就好了
69 楼 leadyu 2008-03-06  
xlongbuilder 写道
2008-03-06 16:42:42,406 INFO [org.jwebap.plugin.http.HttpComponent] - <httpcomponent startup.>
2008-03-06 16:42:42,453 INFO [org.jwebap.plugin.method.MethodComponent] - <methodcomponent startup.>
2008-03-06 16:42:42,687 INFO [org.jwebap.plugin.jdbc.JdbcComponent] - <dbcomponent startup.>
2008-03-06 16:42:42,687 INFO [org.jwebap.core.Startup] - <jwebap component startup.>

版本是 jwebap_0.5.8_all_4

启动似乎正常 而且是在最前面 顺序也没问题吧

但是无法得到jdbc 监控信息,其他监控正常

说下我的环境
jdk1.5 tomcat struts spring hibernate sqlserver

另外 我们的系统 是自己起的Socket连接 系统所有的对外服务都是通过这些连接的
tomact 只是提供启动界面
是不是因为这个原因啊 另外里面用来好多线程 这个能不能捕获?


你也把spring和jwebap的配置文件发我邮箱,yu-lead@163.com
68 楼 leadyu 2008-03-06  
heaven 写道
我更新到4版本,还是noclassdeferror,由于程序在内网,我不能贴出详细的堆栈,
我再描述一下我的环境的架构,
tomcat5.5/common/endorsed/ojdbc14.jar
webapp/WEB-INF/libjwebap_0.58.jar
jndi数据源就是用的tomcat默认的dbcp,没有特别写oracle的drivermanager,
程序里数据源就是spring的标准的写法,持久层就是ibatis和少量的spring jdbc,
没有getConnection以及类似方法,


你可以把spring和jwebap的配置文件,以及spring的包,发我邮箱,我分析一下。
67 楼 xlongbuilder 2008-03-06  
2008-03-06 16:42:42,406 INFO [org.jwebap.plugin.http.HttpComponent] - <httpcomponent startup.>
2008-03-06 16:42:42,453 INFO [org.jwebap.plugin.method.MethodComponent] - <methodcomponent startup.>
2008-03-06 16:42:42,687 INFO [org.jwebap.plugin.jdbc.JdbcComponent] - <dbcomponent startup.>
2008-03-06 16:42:42,687 INFO [org.jwebap.core.Startup] - <jwebap component startup.>

版本是 jwebap_0.5.8_all_4

启动似乎正常 而且是在最前面 顺序也没问题吧

但是无法得到jdbc 监控信息,其他监控正常

说下我的环境
jdk1.5 tomcat struts spring hibernate sqlserver

另外 我们的系统 是自己起的Socket连接 系统所有的对外服务都是通过这些连接的
tomact 只是提供启动界面
是不是因为这个原因啊 另外里面用来好多线程 这个能不能捕获?
66 楼 heaven 2008-03-06  
我更新到4版本,还是noclassdeferror,由于程序在内网,我不能贴出详细的堆栈,
我再描述一下我的环境的架构,
tomcat5.5/common/endorsed/ojdbc14.jar
webapp/WEB-INF/libjwebap_0.58.jar
jndi数据源就是用的tomcat默认的dbcp,没有特别写oracle的drivermanager,
程序里数据源就是spring的标准的写法,持久层就是ibatis和少量的spring jdbc,
没有getConnection以及类似方法,
65 楼 meikefu 2008-03-06  
楼主的框架让人兴奋,java是我见过最可爱的东西
64 楼 leadyu 2008-03-05  
22点43分,发布jwebap_0.5.8_all_5.zip,解决了method监控对简单类型数组不正确处理的BUG。

之前有出现,被监控方法抛出‘简单类型类找不到错误’的朋友,请及时更新,谢谢!
63 楼 leadyu 2008-03-05  
yh_private 写道
打开控制台的时候~~~~~~~闷,弄了一中午

java.lang.NullPointerException
com.opensymphony.module.sitemesh.filter.PageResponseWrapper.getPage(PageResponseWrapper.java:263)
com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:147)
com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:58)



com.opensymphony.module.sitemesh.filter.PageResponseWrapper.getPage抱错的这个类是你项目里面的filter,从错误来看,似乎看不出和jwebap的关系,有否更直接的信息?

你可以检查一下你访问控制台的路径是否正确?
62 楼 yh_private 2008-03-05  
打开控制台的时候~~~~~~~闷,弄了一中午

java.lang.NullPointerException
com.opensymphony.module.sitemesh.filter.PageResponseWrapper.getPage(PageResponseWrapper.java:263)
com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:147)
com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:58)

61 楼 leadyu 2008-03-05  
这个问题,昨天已经有人发邮件给我了,我会在后续尽快解决。

这是由于被监控的方法返回了简单类型的数组,而jwebap对简单类型数组的处理有bug
60 楼 zbird 2008-03-05  
又发现新问题了,监视方法的时候出的问题。
处理不了byte?
java.lang.ClassNotFoundException: byte
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoa
der.java:1363)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoa
der.java:1209)
        at org.jwebap.bytecode.asm.MethodUtil.getClass(MethodUtil.java:62)
        at org.jwebap.bytecode.asm.MethodUtil.parseTypeToClass(MethodUtil.java:3
4)
        at org.jwebap.bytecode.asm.MethodUtil.findMethod(MethodUtil.java:18)
59 楼 leadyu 2008-03-04  
jwebap发布0.5.8的第4次修正版本——jwebap_0.5.8_all_4.zip,解决了jdbc监控,解决对驱动私有方法的错误处理bug。

请关注。
58 楼 txzyhm521 2008-03-04  

我配置只监听方法和http的:

生成字节码错误:null

java.lang.ClassNotFoundException: byte
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1358)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
at org.jwebap.bytecode.asm.MethodUtil.getClass(MethodUtil.java:62)
at org.jwebap.bytecode.asm.MethodUtil.parseTypeToClass(MethodUtil.java:34)
at org.jwebap.bytecode.asm.MethodUtil.findMethod(MethodUtil.java:18)

57 楼 leadyu 2008-03-04  
leadyu 写道
zbird 写道
我出这个问题
Caused by: java.lang.ClassCastException: org.jwebap.plugin.jdbc.TraceDetectConnection cannot be cast to oracle.jdbc.driver.OracleConnection
at oracle.jdbc.driver.OracleDriver.connect_$proxy(OracleDriver.java:345)
... 54 more


这个问题,我会尽快检查,可能是由于oracle驱动,内部有私有方法也返回Connection,而connect()方法内部去cast这个Connection(已经被jwebap代理过了),所以cast失败。


我刚才看了oracle驱动的源码,确实如我猜测的那样,这个bug,我明天发布jwebap_0.5.8_all_4.zip,请关注。
56 楼 heaven 2008-03-04  
leadyu 写道
heaven 写道
spring的datasource实现都是建议用在测试环境下的,而且spring拿到的都是容器的javax.sql.DataSource的实现,比如我在tomcat下拿到的就是org.apache.dbcp.BasicDataSource,在was下可能就是was的datasource的实现,有没有在这种环境下成功的例子,我觉得我的环境应该是比较很典型的情况.


你这样说,我有点明白了,不管你用什么datasource实现,容器总是把datasource发布在命名服务里面的吧。

你的应用里面总有代码封装了,从jndi取datasource的代码,最终返回connection的类。


我的应用里真的没有,相信很多人也没有,所有的数据库操作都是回调实现的,不直接拿连接,spring应该也是用javax.sql.DataSource#getConnection(),对了Spring是有一个封装,印象里是DataSourceUtils.getConnection(javax.sql.DataSource datasource),和你说的应该也不太一致吧?
55 楼 leadyu 2008-03-04  
zbird 写道
我出这个问题
Caused by: java.lang.ClassCastException: org.jwebap.plugin.jdbc.TraceDetectConnection cannot be cast to oracle.jdbc.driver.OracleConnection
at oracle.jdbc.driver.OracleDriver.connect_$proxy(OracleDriver.java:345)
... 54 more


这个问题,我会尽快检查,可能是由于oracle驱动,内部有私有方法也返回Connection,而connect()方法内部去cast这个Connection(已经被jwebap代理过了),所以cast失败。
54 楼 leadyu 2008-03-04  
heaven 写道
spring的datasource实现都是建议用在测试环境下的,而且spring拿到的都是容器的javax.sql.DataSource的实现,比如我在tomcat下拿到的就是org.apache.dbcp.BasicDataSource,在was下可能就是was的datasource的实现,有没有在这种环境下成功的例子,我觉得我的环境应该是比较很典型的情况.


你这样说,我有点明白了,不管你用什么datasource实现,容器总是把datasource发布在命名服务里面的吧。

你的应用里面总有代码封装了,从jndi取datasource的代码,最终返回connection的类。
53 楼 zbird 2008-03-04  
我出这个问题
Caused by: java.lang.ClassCastException: org.jwebap.plugin.jdbc.TraceDetectConnection cannot be cast to oracle.jdbc.driver.OracleConnection
at oracle.jdbc.driver.OracleDriver.connect_$proxy(OracleDriver.java:345)
... 54 more

相关推荐

    GPU-Z.0.5.8

    GPU-Z.0.5.8显卡详细显示工具自己试试

    soljson-v0.5.8 commit.23d335f2.js

    soljson-v0.5.8 commit.23d335f2.js soljson-v0.5.8 commit.23d335f2.js

    Blueprint css框架2013年最新可视化操作工具-boks-v0.5.8

    最新版div+css可视化开发工具,boks-v0.5.8,适用于blueprint css框架的开发,拖拉拽即可导出漂亮的网页架构。

    OpenCore-0.5.8

    OpenCore是类似于Clover的UEFI的引导器,OpenCore提供了详细的日志系统,帮助黑苹果排错;其次OpenCore以更先进的方法注入第三方Kext,不破坏系统的SIP;再次,OpenCore支持读取NVRAM等一系列特性,可以让黑苹果变得...

    docker-ghost:Docker 容器中的 Ghost

    版本幽灵: 0.5.8 NodeJS: 0.12.0 Ubuntu: 14.04.01用法克隆存储库 git clone git@github.com:zaiste/docker-ghost.git构建图像 cd docker-ghost sudo docker build -t &lt;your&gt;/ghost:0.5.8 .更新幽灵替换以下行中...

    Python库 | tushare-0.5.8.zip

    python库。 资源全名:tushare-0.5.8.zip

    Android代码-MaterialLoadingProgressBar

    compile('com.lsjwzh:materialloadingprogressbar:0.5.8-RELEASE') xml: options: java api: show arrow 'CircleProgressBar' will not show arrow by default. You can enable arrow drawing like this: ...

    Python库 | pycryptopp-0.5.8.zip

    资源分类:Python库 所属语言:Python 资源全名:pycryptopp-0.5.8.zip 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    GPU-Z.0.5.8 汉化版

    GPU-Z是提供给我们的一款GPU识别工具,绿色免安装,界面直观,运行后即可显示GPU核心,以及运行频率、带宽等,如同CPU-Z一样,这也是款必备工具

    Python库 | sovereign-0.5.8.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:sovereign-0.5.8.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    colonyNetwork:殖民地网络智能合约

    殖民地网络 定义的运行殖民地网络的合同 错误赏金计划 ... $ docker pull ethereum/solc:0.5.8 安装 在您选择的工作目录中,克隆最新版本的ColonyNetwork存储库: $ git clone https://github.com/JoinColo

    Python库 | tribology-0.5.8.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:tribology-0.5.8.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | reprobench-0.5.8.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:reprobench-0.5.8.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | pyunicore-0.5.8.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:pyunicore-0.5.8.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | OLCTools-0.5.8.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:OLCTools-0.5.8.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | dandan-0.5.8.tar.gz

    python库。资源全名:dandan-0.5.8.tar.gz

    Python库 | BentoML-0.5.8.tar.gz

    python库。资源全名:BentoML-0.5.8.tar.gz

    Python库 | JPSLUtils-0.5.8.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:JPSLUtils-0.5.8.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | braga-0.5.8.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:braga-0.5.8.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | anndata-0.5.8.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:anndata-0.5.8.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

Global site tag (gtag.js) - Google Analytics