`
leadyu
  • 浏览: 52207 次
  • 性别: 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
分享到:
评论
32 楼 mudong 2008-03-04  
<p>我的 HttpComponent ok!</p><p> </p><p>MethodComponent和JdbcComponent 什么也没有</p><p> </p><p>springmvc+spring+hibernate架构</p><p> </p><div class='quote_title'>数据源:<br/> </div><div class='quote_div'>&lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"&gt;<br/> &lt;property name="driverClassName"&gt;<br/> &lt;value&gt;${jdbc.driver}&lt;/value&gt;<br/> &lt;/property&gt;<br/> &lt;property name="url"&gt;<br/> &lt;value&gt;${jdbc.url}&lt;/value&gt;<br/> &lt;/property&gt;<br/> &lt;property name="username"&gt;<br/> &lt;value&gt;${jdbc.username}&lt;/value&gt;<br/> &lt;/property&gt;<br/> &lt;property name="password"&gt;<br/> &lt;value&gt;${jdbc.password}&lt;/value&gt;<br/> &lt;/property&gt;<br/> &lt;property name="initialSize"&gt;<br/> &lt;value&gt;${jdbc.initialSize}&lt;/value&gt;<br/> &lt;/property&gt;<br/> &lt;/bean&gt;</div> <p> </p>
31 楼 leadyu 2008-03-04  
惊鸿逝水 写道
试试了你的Jwebap,很遗憾的告诉你,在我的架构平台上,你啥都监控不到,唉。。。。。。



你要是有点建设性,能不能给大家说说你是什么架构,我分析分析,为什么监控不到
30 楼 melin 2008-03-03  
还是老老实实用jamon吧。毕竟人家也经历了那么长时间的洗礼。
29 楼 惊鸿逝水 2008-03-03  
试试了你的Jwebap,很遗憾的告诉你,在我的架构平台上,你啥都监控不到,唉。。。。。。

28 楼 leadyu 2008-03-03  
惊鸿逝水 写道
当然jwebap可以和应用运行在同一个JVM,只是我不希望jwebap去修改web.xml
比如我使用jwebap作为我的管理监控控制台,打包部署为console.war
而我要配置jwebap监控我的一个应用web.war的性能,只要配置对web.war入口servlet做ASM注入就可以监控到了


我可能没有很清楚理解你的意思,你可能也一样,^_^ 所以我先说说我的看法,欢迎指正:

现在jwebap只有一个jar包,没有自己独立的war,部署起来很简单,另外jwebap的启动做了很多的事情,包括

轨迹容器的启动,配置的加载,plugin的加载和初始化,以及字节码的注入,这些需要在应用中有一个切入点去启动,现在我所想到的就是在应用中配置一个Listner。我相信这点是可以接受的。

而启动jwebap的这个切入点必须在应用的内部,不可能通过另一个JVM or App启动Jwebap去监控其他JVM or App运行的应用(类的静态增强,其实是一个比较复杂的过程,需要考虑到应用的中间件的一些ClassLoader加载情况)

如果你有比Listner更好的想法,启动Jwebap,欢迎提出

27 楼 惊鸿逝水 2008-03-03  
当然jwebap可以和应用运行在同一个JVM,只是我不希望jwebap去修改web.xml
比如我使用jwebap作为我的管理监控控制台,打包部署为console.war
而我要配置jwebap监控我的一个应用web.war的性能,只要配置对web.war入口servlet做ASM注入就可以监控到了
26 楼 leadyu 2008-03-03  
惊鸿逝水 写道
能不能将监控和应用分开部署?

如果不能,我想意义就不太大了。。。。。


分开部署考虑过,但是暂时还需要权衡,虽然jwebap做到这点在架构上并不困难(jwebap的轨迹容器相当于收集器,如果实现群集和广播轨迹给各远程分析器即可实现,并不影响已经开发好的plugin)。

原因有如下几点:

分布式部署,看上去是对系统侵入性更小了,其实不然,

一:分开部署,在配置和部署上肯定更为复杂,这和Jwebap尽可能简化部署的思路不一致(在简化部署方面jwebap花了很多的精力)

二:为了实现广播,实际带来的开销比部署在一起大得多,其实分开部署在Profiler工具里面已经有很多先例,可见效果并不如想象的好。

不过,也许在以后,jwebap可能会实现轨迹容器的分布式,当然这也仅是作为一种新的部署方式提供给用户。

25 楼 leadyu 2008-03-03  
midizhang 写道
想用着试试看,不过在部署的时候出现问题,报错:
org.jwebap.config.ConfigException: 配置工厂未初始化,请调用 configure(String path) 进行初始。

不知道是怎么一回事?
直接添加bin下的jwebap.xml文件到web-inf目录下,修改其中<property name='driver-clazzs'>orcale.jdbc.driver.OracleDeriver</property>

然后添加相关的内容到web.xml下
启动没报错,但是调用servlet时报错


出这个错是jwebap没找到jwebap.xml导致,所以你可以检查一下:

引用
1) web.xml里面
<context-param>
<param-name>config</param-name>
<param-value>/WEB-INF/jwebap.xml</param-value>
</context-param>

是否配置正确。

2)web.xml里面JwebapListener是否配置正确。


我需要更多的信息帮助你分析。




24 楼 惊鸿逝水 2008-03-03  
能不能将监控和应用分开部署?

如果不能,我想意义就不太大了。。。。。
23 楼 midizhang 2008-03-03  
想用着试试看,不过在部署的时候出现问题,报错:
org.jwebap.config.ConfigException: 配置工厂未初始化,请调用 configure(String path) 进行初始。

不知道是怎么一回事?
直接添加bin下的jwebap.xml文件到web-inf目录下,修改其中<property name='driver-clazzs'>orcale.jdbc.driver.OracleDeriver</property>

然后添加相关的内容到web.xml下
启动没报错,但是调用servlet时报错
22 楼 qlqsh 2008-03-03  
看起来不错,目前暂时用不到,保存先。
21 楼 leadyu 2008-03-02  
leadyu 写道
stevenmo 写道
我的框架是 spring+ibatis  数据库是mysql   配置文件使用的是bin 目录下的jwebap.xml  唯一修改的地方 在driver-clazzs 中加入 mysql的数据库驱动org.gjt.mm.mysql.Driver;



0.5.8版本做了第三次修正,发布jwebap_0.5.8_all_3.zip。这次实现了jwebap对父类的类字节码增强处理。

所以,应该不会出现你上述所说的问题了。


20 楼 leadyu 2008-03-01  
stevenmo 写道
我的框架是 spring+ibatis  数据库是mysql   配置文件使用的是bin 目录下的jwebap.xml  唯一修改的地方 在driver-clazzs 中加入 mysql的数据库驱动org.gjt.mm.mysql.Driver;


你的问题,我已经重现,原因如下:

由于目前jwebap实现的类字节码增强,只对本类进行增强,而不对父类增强,所以,当你配驱动org.gjt.mm.mysql.Driver后,没有效果。因为org.gjt.mm.mysql.Driver继承于com.mysql.jdbc.NonRegisteringDriver,com.mysql.jdbc.NonRegisteringDriver才是真正的驱动实现。

所以解决办法有两个:

1)配置com.mysql.jdbc.NonRegisteringDriver为驱动(推荐)
2)配置spring,或者ibatis的Datasource类为驱动

对于Jwebap不对父类进行字节码增强的问题,我将会在下面版本解决。

19 楼 leadyu 2008-02-29  
谢谢大家的支持。最近收到了不少朋友的邮件,反映一些问题,其中,一个较为普遍的问题是:

在Jwebap和Spring配合使用时,启动JdbcComponent有时会报java.lang.LinkageError: duplicate class definition: oracle/jdbc/driver/OracleDriver 这样的错误。

这是由于Spring先启动了数据源导致。可以尝试,下面办法:

在web.xml里面把JwebapListener的启动顺序放到最前,以保证它比Spring先加载驱动。
18 楼 bfox 2008-02-29  
支持原创,留个记号,也许哪天能用上。
17 楼 leadyu 2008-02-29  
从日志来看,应该是正常启动了。也就是说org.gjt.mm.mysql.Driver返回的连接都可以被监控。

我分析有两种可能:1)ibatis并没有采用org.gjt.mm.mysql.Driver作为本地驱动。

2)jdbc监控已经工作了,但是视图展现的JS出错了。这点我可以分析一下

如果有什么问题可以联系我(yu-lead@163.com  QQ:160538666),谢谢你的支持。
16 楼 stevenmo 2008-02-29  
本地数据源
15 楼 leadyu 2008-02-29  
是本地数据源,还是jndi远程数据源?

14 楼 stevenmo 2008-02-29  
2008-02-29 16:47:42,415 INFO HttpComponent:43 [main] - httpcomponent startup.
2008-02-29 16:47:42,446 INFO MethodComponent:51 [main] - methodcomponent startup
.
2008-02-29 16:47:42,555 INFO JdbcComponent:89 [main] - dbcomponent startup.
2008-02-29 16:47:42,555 INFO Startup:61 [main] - jwebap component startup.
根据这些启动提示  应该是说jwebap启动成功了的
13 楼 stevenmo 2008-02-29  
http comonent 都可以看了  应该不是问题吧  启动也没看到错误提示

相关推荐

    oracle 10.2.0.5.8

    Oracle 10.2.0.5.8 是Oracle数据库的一个特定版本,它包含了重要的修复和性能优化。Oracle数据库是全球广泛使用的大型企业级关系型数据库管理系统,由Oracle公司开发和维护。此版本的发布旨在解决之前版本中发现的...

    GPU-Z.0.5.8 汉化版

    总的来说,GPU-Z.0.5.8汉化版是每个关心电脑硬件性能的用户必备的工具之一,它提供的详尽信息和实时监控能力,使得用户能够更好地了解和管理他们的GPU,从而提升系统的稳定性和效率。无论是日常使用还是专业需求,...

    GPU-Z.0.5.8

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

    Python库 | cobra-0.5.8-cp27-cp27mu-manylinux1_x86_64.whl

    标题中的"Python库 | cobra-0.5.8-cp27-cp27mu-manylinux1_x86_64.whl"指的是Python的一个特定版本的库——cobra,其版本号为0.5.8,适用于Python 2.7解释器(由"cp27"表示)且包含mu多线程支持。"manylinux1_x86_64...

    soljson-v0.5.8 commit.23d335f2.js

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

    Python库 | BentoML-0.5.8.tar.gz

    6. **监控和日志**:BentoML集成了Prometheus和Grafana等监控工具,帮助开发者实时了解服务状态,及时发现和解决问题。 7. **扩展性**:BentoML的插件系统允许开发者自定义服务行为,例如添加自定义预处理或后处理...

    PyPI 官网下载 | gear-0.5.8.tar.gz

    标题中的“PyPI 官网下载 | gear-0.5.8.tar.gz”指的是Python的包索引(PyPI)上发布的gear版本为0.5.8的源代码压缩包,其格式为tar.gz。PyPI是Python开发者发布和分享自己开发的软件包的官方平台,方便其他用户通过...

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

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

    PyPI 官网下载 | djangorestsearch-0.5.8.tar.gz

    《PyPI官网下载 | djangorestsearch-0.5.8.tar.gz——探索Python库的奥秘》 PyPI(Python Package Index),是Python开发者最重要的资源库,它提供了丰富的Python库,供全球开发者免费下载和使用。本次我们将关注的...

    oracle 10.2.0.5.0 ~10.2.0.5.8

    - **测试与监控**:升级后,进行性能测试和功能验证,监控数据库运行状态,确保一切正常。 5. **注意事项**: - 在升级前,详细阅读Oracle的官方文档,了解补丁的具体变更内容和升级步骤。 - 升级过程中应遵循...

    Python库 | runway-python-0.5.8.tar.gz

    4. **可视化界面**:Runway提供了一个用户友好的Web界面,可以实时监控模型的输入、输出和性能指标,帮助开发者调试和优化模型。 5. **集成其他工具**:Runway与Jupyter Notebook、TensorBoard等流行开发工具集成,...

    PyPI 官网下载 | dmsa-0.5.8.tar.gz

    标题中的“PyPI 官网下载 | dmsa-0.5.8.tar.gz”表明这是一个在Python Package Index(PyPI)上发布的软件包。PyPI是Python开发者用来分享和发现第三方库的官方平台,它使得用户能够方便地通过pip(Python的包管理器...

    PyPI 官网下载 | botnoi-0.5.8.tar.gz

    PyPI是Python开发者发布自己编写的Python库或项目的平台,使得全球的Python用户都能方便地安装和使用。这里的"botnoi-0.5.8.tar.gz"是该库的一个具体版本,0.5.8代表了版本号,而".tar.gz"是文件的压缩格式,表明这...

    PyPI 官网下载 | jupyterhubutils-0.5.8-py2.py3-none-any.whl

    随着JupyterHub的版本更新,`jupyterhubutils`也会定期发布新版本,以保持与最新JupyterHub版本的兼容性,并添加新的功能和修复已知问题。开发者应定期检查更新,确保使用的版本是最新的,以获得最佳的稳定性和功能...

    PyPI 官网下载 | monobox-0.5.8.tar.gz

    标题中的"PyPI 官网下载 | monobox-0.5.8.tar.gz"表明这是一个在Python Package Index(PyPI)官方源上发布的软件包,名为`monobox`,版本号为0.5.8,且以tar.gz格式提供。在Python社区中,PyPI是开发者分享和获取...

    Python库 | dagster_graphql-0.5.8.tar.gz

    这个0.5.8版本可能包含对库的改进和修复,比如性能优化、新的功能添加或者已知问题的解决。在使用这个库之前,开发者需要先将其解压,然后通过Python的pip或其他安装工具进行安装,例如: ```bash pip install . ```...

    wpa_supplicant-0.5.8.tar.gz

    《wpa_supplicant-0.5.8:无线网络连接的关键组件》 在现代计算机系统中,无线网络连接已经成为不可或缺的一部分。特别是在Linux操作系统中,为了实现安全、稳定的无线连接,wpa_supplicant扮演了至关重要的角色。...

    OpenCore-0.5.8

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

    PyPI 官网下载 | cy-0.5.8.tar.gz

    《PyPI官网下载 | cy-0.5.8.tar.gz:深入理解Python库的发布与使用》 在Python的世界里,PyPI(Python Package Index)是最重要的资源库,它为全球的开发者提供了一个集中地,可以发布、分享并下载Python软件包。...

Global site tag (gtag.js) - Google Analytics