- 浏览: 639595 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
liuche20083736:
非常好
从问题看本质: 研究TCP close_wait的内幕 -
xiaopohai85707:
优化算法与原来需求不符
过滤字符的性能调优?挤一挤还是有的 -
kmy_白衣:
生成的area图有时候 标签的数值和图标上看上去的数值不一致。 ...
OpenFlashChart2之恶心文档 -
tom&jerry:
大神,请教一个问题,按名称排序为何无效,用的2.4.3 XPA ...
深入浅出jackrabbit之十三 查询之AST和QT -
jd2bs:
改成精确匹配可以了< filter-mapping &g ...
细谈Ehcache页面缓存的使用
/**
*作者:张荣华
*日期:2008-2-25
**/
之前有一篇文章讲到如何使用jamon来监控请求以及方法得调用(原文地址见:[url]http://www.iteye.com/post/354575 [/url]),本文属于其姊妹篇,使用jamon监控系统的sql调用及其调用效率。
需求:
1我们知道在使用hibernate得时候,我们可以打开show sql选项,可以直接查看sql语句调用的情况,那么当我们使用其他持久技术的时候我们也需要这个功能怎么办呢,没有关系,jamon能够帮我们做到。
2 很多时候,不同的程序员会写出不同的性能的sql,有时候可能会不小心或者因为不知道而写出性能很差的sql,我自己曾经就发生过这种事情,在500w条数据的表里使用了一个limit来分页,到后面,执行一条sql都需要几分钟,诸如此类的时候可能大家都有碰到过,如果能有监控sql性能的工具嵌在应用里该多好,当然有jamon就可以帮我们做到。
对于jamon来说,每一个query的执行之后的统计结果都会被保存下来,这些概要统计都以MonProxy-SQL开头。这些统计中包括查询执行的时间,有比如平均时间,执行总时间,最小执行时间,最大执行时间,这些东西难道不是我们正想要的吗。
那么让我们开始吧,我们知道,这些query执行的统计应该是在connection中被统计的,也就是说我们要代理一般的connection,而connection又是由datasource产生的,所以我们可以代理datasource,说干就干。
一个datasource接口中关于connection的方法只有两个:
也就是说我们只要override这两个方法即可。
根据这个思路我写了以下代码:
显然这个一个代理模式。接下来就是生成这个代理类,我是在spring中注册了这么一个类:
writeMonitorDataSource 所依赖的writeDataSource就是我们真正配置的datasource,比如:
好了,那么在使用datasource的时候,我们应该用哪个呢,当然是writeMonitorDataSource这个里,我们可以把它注入给jdbcTemplate,或者sessionfactory,或者其他需要用到datasource的地方。
到这里,就一切准备完毕了,我们可以看看我们sql语句的执行效率了(这个页面的地址为sql.jsp):
见图1
当然要我们的应用能够显示这个页面,我们需要把jamon的一组页面拷到我们的应用中,这一组页面包含在我提供下载的包中,最新的jamon版本是2.7。
我们可以看到id为153的那条sql语句执行了78ms,我要去看看这条sql语句是不是有点什么问题或者是否有优化的可能性。
当然,刚才说到每一条sql语句都是有统计平均时间,最大最小执行时间等等,没错,在另外一个页面jamonadmin.jsp上就包含这些内容
见图2
上面的图片代表hits表示执行次数,avg表示sql执行的平均时间,后面的min和max表示sql执行的最小耗时和最大耗时。从这里我们能够更直观的看到我们每条sql语句执行的情况。很有用的一个功能。
而且在上面那两个页面上,我们还可以选择把sql执行的结果导出来,可以导成xml或excel格式。
总结:使用jamon来监控我们的sql语句我觉得很有使用意义,而且使用jamon对我们的应用来说完全是松耦合的,根本不需要更改我们的业务逻辑代码,完全是可插拔的,我们也可以开发时使用jamon,部署时拔掉jamon。有了它能够使一些程序员能够更多一点的关注自己所写的sql的效率,当然如果之前开发的时候没有使用jamon也没有关系,即使上线后也可以查看一下sql语句是否有问题,比如哪些sql语句执行得比较频繁,是否存在给其做缓存得可能性等等。总之使用jamon在应用程序中来监控我们得sql语句具有很强得实用意义,
再次总结:jamon,很好,很强大。
它不仅仅可以监控j2ee工程(包括EJB以及WebModule)的所有的jdbc调用,包括调用的堆栈(什么程序打开的连接),还可以监控方法的调用,以及http的请求,所有的这一切,只需要部署一个jar,以及配置一个配置文件。
你提供的功能jamon都有,但是你的界面看起来更好看,更耐看一点,赞一个。
jamon的界面太差劲了
看了下jamon,应该说jwebap在部署方面真的简单太多了。
首先,jwebap对于jdbc的监控,根本不需要代理数据源,也不需要实现特定的代理驱动。而且jamon这种方式应该是没法监控jndi数据源的(从我初步从它的配置文档了解到的,我只能说应该:-) )
另外,对于EJB的监控,Jwebap也根本不需要配EJB的代理,只要在method plugin的'detect-class'参数里,配置想监控的包名即可,如"test.ejb.*;com.ejb.*;"
jwebap的部署,只需要丢个jar包,配下jwebap.xml 和对应的web.xml即可。
我觉得可以这么归结:
第一代prfiling tools:基于代理,代理,又代理的思想,实现monitor。缺点是,部署麻烦,甚至是还需要修改项目代码才能部署,功能也不强。比如jamon和P6SQL
第二代prfiling tools:基于专属平台JVMPI,缺点:给系统带来了10-20倍的性能负担,同时部署复杂,但是,功能强大,如jprofiler
第三代prfiling tools:出现了BCEL,后更有ASM等字解码指令操作框架,介于jdk14-15之间。基于字解码操作,profiling实现了真正意义的动态monitor。这种profiling部署简单,性能高,但是功能不算非常强大。
第四代prfiling tools:出现jdk instrument。更有aspectJ。这时profiling功能得到增强,但是丢失了大量停留在jdk14的用户,同时部署也不简单。
Jwebap从这种划分,应该说,处于第三代和第四代之间,Jwebap-core采用第三代技术,plugin则很任意,介于第四代技术。
它不仅仅可以监控j2ee工程(包括EJB以及WebModule)的所有的jdbc调用,包括调用的堆栈(什么程序打开的连接),还可以监控方法的调用,以及http的请求,所有的这一切,只需要部署一个jar,以及配置一个配置文件。
你提供的功能jamon都有,但是你的界面看起来更好看,更耐看一点,赞一个。
jamon的界面太差劲了
这些问题我也想过
第一个问题,
数据库提供得工具来统计?
1 是两个部分要同时抓,数据库统计得是所有请求,一定程度上加大得数据库的压力,当然如果数据库压力不大的情况下这样做完全没有问题。
2 可以使用sniffer抓包来分析数据库的压力情况,但这种数据无法收集起来供我们所用。当然如果我们不需要这些数据,只是随便看看,遇到问题分析一下,使用sniffer不失为一个比较好的方案。
而对比jamon来说,jamon搜集的数据对我们来说失可以随意存储分析的,比如上面所说到的做一个负载分析系统,那么使用它来搜集数据对编程来说其实是非常方便的。
用它我们可以做很多东西,比如性能监控系统,一个企业中必定有很多的app,那么所有的app都可以利用它来搜集请求的数据,不管是http请求,还是jdbc,这些数据都可以搜集起来,然后再统计分析,所以jamon是一个很有用的东西,虽然原理简单,但是自己开发一个成本也比较大,直接扩展它比如方便,真的是一个很好的东西,可惜没有人认识到它的价值
*作者:张荣华
*日期:2008-2-25
**/
之前有一篇文章讲到如何使用jamon来监控请求以及方法得调用(原文地址见:[url]http://www.iteye.com/post/354575 [/url]),本文属于其姊妹篇,使用jamon监控系统的sql调用及其调用效率。
需求:
1我们知道在使用hibernate得时候,我们可以打开show sql选项,可以直接查看sql语句调用的情况,那么当我们使用其他持久技术的时候我们也需要这个功能怎么办呢,没有关系,jamon能够帮我们做到。
2 很多时候,不同的程序员会写出不同的性能的sql,有时候可能会不小心或者因为不知道而写出性能很差的sql,我自己曾经就发生过这种事情,在500w条数据的表里使用了一个limit来分页,到后面,执行一条sql都需要几分钟,诸如此类的时候可能大家都有碰到过,如果能有监控sql性能的工具嵌在应用里该多好,当然有jamon就可以帮我们做到。
对于jamon来说,每一个query的执行之后的统计结果都会被保存下来,这些概要统计都以MonProxy-SQL开头。这些统计中包括查询执行的时间,有比如平均时间,执行总时间,最小执行时间,最大执行时间,这些东西难道不是我们正想要的吗。
那么让我们开始吧,我们知道,这些query执行的统计应该是在connection中被统计的,也就是说我们要代理一般的connection,而connection又是由datasource产生的,所以我们可以代理datasource,说干就干。
一个datasource接口中关于connection的方法只有两个:
/** * <p>Attempts to establish a connection with the data source that * this <code>DataSource</code> object represents. * * @return a connection to the data source * @exception SQLException if a database access error occurs */ Connection getConnection() throws SQLException; /** * <p>Attempts to establish a connection with the data source that * this <code>DataSource</code> object represents. * * @param username the database user on whose behalf the connection is * being made * @param password the user's password * @return a connection to the data source * @exception SQLException if a database access error occurs * @since 1.4 */ Connection getConnection(String username, String password) throws SQLException;
也就是说我们只要override这两个方法即可。
根据这个思路我写了以下代码:
/** * @author ahuaxuan(aaron zhang) * @since 2008-2-25 * @version $Id$ */ public class MonitorDataSource implements DataSource { public DataSource realDataSource; public void setRealDataSource(DataSource realDataSource) { this.realDataSource = realDataSource; } public DataSource getRealDataSource() { return realDataSource; } public Connection getConnection() throws SQLException { //表示由jamon来代理realDataSource返回的Connection return MonProxyFactory.monitor(realDataSource.getConnection()); } public Connection getConnection(String username, String password) throws SQLException { //表示由jamon来代理realDataSource返回的Connection return MonProxyFactory.monitor(realDataSource.getConnection(username, password)); } }
显然这个一个代理模式。接下来就是生成这个代理类,我是在spring中注册了这么一个类:
<bean id="writeMonitorDataSource" class="org.ahuaxuan.MonitorDataSource" destroy-method="close"> <property name="realDataSource" ref="writeDataSource"/> </bean>
writeMonitorDataSource 所依赖的writeDataSource就是我们真正配置的datasource,比如:
<bean id="writeDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"> <value>${jdbc.driverClassName}</value> </property> <property name="url"> <value>${jdbc.url}</value> </property> <property name="username"> <value>${jdbc.username}</value> </property> <property name="password"> <value>${jdbc.password}</value> </property> <property name="maxActive"> <value>${jdbc.maxActive}</value> </property> <property name="maxIdle"> <value>${jdbc.maxIdle}</value> </property> <property name="maxWait"> <value>${jdbc.maxWait}</value> </property> </bean>
好了,那么在使用datasource的时候,我们应该用哪个呢,当然是writeMonitorDataSource这个里,我们可以把它注入给jdbcTemplate,或者sessionfactory,或者其他需要用到datasource的地方。
到这里,就一切准备完毕了,我们可以看看我们sql语句的执行效率了(这个页面的地址为sql.jsp):
见图1
当然要我们的应用能够显示这个页面,我们需要把jamon的一组页面拷到我们的应用中,这一组页面包含在我提供下载的包中,最新的jamon版本是2.7。
我们可以看到id为153的那条sql语句执行了78ms,我要去看看这条sql语句是不是有点什么问题或者是否有优化的可能性。
当然,刚才说到每一条sql语句都是有统计平均时间,最大最小执行时间等等,没错,在另外一个页面jamonadmin.jsp上就包含这些内容
见图2
上面的图片代表hits表示执行次数,avg表示sql执行的平均时间,后面的min和max表示sql执行的最小耗时和最大耗时。从这里我们能够更直观的看到我们每条sql语句执行的情况。很有用的一个功能。
而且在上面那两个页面上,我们还可以选择把sql执行的结果导出来,可以导成xml或excel格式。
总结:使用jamon来监控我们的sql语句我觉得很有使用意义,而且使用jamon对我们的应用来说完全是松耦合的,根本不需要更改我们的业务逻辑代码,完全是可插拔的,我们也可以开发时使用jamon,部署时拔掉jamon。有了它能够使一些程序员能够更多一点的关注自己所写的sql的效率,当然如果之前开发的时候没有使用jamon也没有关系,即使上线后也可以查看一下sql语句是否有问题,比如哪些sql语句执行得比较频繁,是否存在给其做缓存得可能性等等。总之使用jamon在应用程序中来监控我们得sql语句具有很强得实用意义,
再次总结:jamon,很好,很强大。
评论
20 楼
bluejiejie
2009-01-05
我写了个MonitorDataSource的类override之前的DataSource,并在applicationContext.xml配置完,运行sql.jsp报错,发现里面有句sql:select * from array,这是什么意思呢?不是说sql.jsp不用改就能看到效果吗?
19 楼
swen00
2008-12-18
当然要我们的应用能够显示这个页面,我们需要把jamon的一组页面拷到我们的应用中,这一组页面包含在我提供下载的包中
-----------------------------------------------------------------
老大,你提供的在哪里?怎么配置页面显示?
搞定了,老大你给的包里没有,要去下载个最新的版本里,里面有war包,将需要页面sql.jsp拷贝进去就可以了
http://jamonapi.sourceforge.net
-----------------------------------------------------------------
老大,你提供的在哪里?怎么配置页面显示?
搞定了,老大你给的包里没有,要去下载个最新的版本里,里面有war包,将需要页面sql.jsp拷贝进去就可以了
http://jamonapi.sourceforge.net
18 楼
chijq
2008-12-16
目前我们在遇到性能问题时也会使用JAmon进行监控,效果哦很好
配置也很简单
在web.xml中增加filter,在applicationContext增加性能拦截器和代理数据源即可
分析内容还是很充分的,推荐使用
配置也很简单
在web.xml中增加filter,在applicationContext增加性能拦截器和代理数据源即可
分析内容还是很充分的,推荐使用
17 楼
annegu
2008-12-16
大哥,你的错是jwebap抛出来的呀,你没有用jamon,是不是贴错地方了
16 楼
hxirui
2008-12-16
org.jwebap.config.ConfigException: 配置工厂未初始化,请调用 configure(String path) 进行初始。
org.jwebap.config.ConfigurationCacher.getConfiguration(ConfigurationCacher.java:47)
org.jwebap.ui.controler.DispatcherFactory.createDispatcherChain(DispatcherFactory.java:34)
org.jwebap.ui.controler.JwebapServlet.doGet(JwebapServlet.java:41)
javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
org.jwebap.config.ConfigurationCacher.getConfiguration(ConfigurationCacher.java:47)
org.jwebap.ui.controler.DispatcherFactory.createDispatcherChain(DispatcherFactory.java:34)
org.jwebap.ui.controler.JwebapServlet.doGet(JwebapServlet.java:41)
javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
15 楼
hy0231
2008-12-01
jamon怎样查看监视结果????????好像好没有人说下.
14 楼
hahabk
2008-07-16
正在想对现在的项目进行监控,但项目配置跟楼主不一样,不知道如何下手,请楼主指点一下啊!谢谢
13 楼
hahabk
2008-07-16
如果我里头的配置文件是这样的,怎么来做呢!
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}"/>
<property name="JDBC.ConnectionURL" value="${url}"/>
<property name="JDBC.Username" value="${username}"/>
<property name="JDBC.Password" value="${password}"/>
<property name="JDBC.DefaultAutoCommit" value="true"/>
<property name="Pool.MaximumActiveConnections" value="40"/>
<property name="Pool.MaximumIdleConnections" value="5"/>
<property name="Pool.MaximumCheckoutTime" value="12000"/>
<property name="Pool.TimeToWait" value="2000"/>
<property name="Pool.PingQuery" value="select 1 from dual"/>
<property name="Pool.PingEnabled" value="false"/>
<property name="Pool.PingConnectionsOlderThan" value="0"/>
<property name="Pool.PingConnectionsNotUsedFor" value="0"/>
</dataSource>
</transactionManager>
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}"/>
<property name="JDBC.ConnectionURL" value="${url}"/>
<property name="JDBC.Username" value="${username}"/>
<property name="JDBC.Password" value="${password}"/>
<property name="JDBC.DefaultAutoCommit" value="true"/>
<property name="Pool.MaximumActiveConnections" value="40"/>
<property name="Pool.MaximumIdleConnections" value="5"/>
<property name="Pool.MaximumCheckoutTime" value="12000"/>
<property name="Pool.TimeToWait" value="2000"/>
<property name="Pool.PingQuery" value="select 1 from dual"/>
<property name="Pool.PingEnabled" value="false"/>
<property name="Pool.PingConnectionsOlderThan" value="0"/>
<property name="Pool.PingConnectionsNotUsedFor" value="0"/>
</dataSource>
</transactionManager>
12 楼
e3002
2008-03-02
spring中已经集成了jamon
11 楼
leadyu
2008-02-26
ahuaxuan 写道
leadyu 写道
它不仅仅可以监控j2ee工程(包括EJB以及WebModule)的所有的jdbc调用,包括调用的堆栈(什么程序打开的连接),还可以监控方法的调用,以及http的请求,所有的这一切,只需要部署一个jar,以及配置一个配置文件。
你提供的功能jamon都有,但是你的界面看起来更好看,更耐看一点,赞一个。
jamon的界面太差劲了
看了下jamon,应该说jwebap在部署方面真的简单太多了。
首先,jwebap对于jdbc的监控,根本不需要代理数据源,也不需要实现特定的代理驱动。而且jamon这种方式应该是没法监控jndi数据源的(从我初步从它的配置文档了解到的,我只能说应该:-) )
另外,对于EJB的监控,Jwebap也根本不需要配EJB的代理,只要在method plugin的'detect-class'参数里,配置想监控的包名即可,如"test.ejb.*;com.ejb.*;"
jwebap的部署,只需要丢个jar包,配下jwebap.xml 和对应的web.xml即可。
我觉得可以这么归结:
第一代prfiling tools:基于代理,代理,又代理的思想,实现monitor。缺点是,部署麻烦,甚至是还需要修改项目代码才能部署,功能也不强。比如jamon和P6SQL
第二代prfiling tools:基于专属平台JVMPI,缺点:给系统带来了10-20倍的性能负担,同时部署复杂,但是,功能强大,如jprofiler
第三代prfiling tools:出现了BCEL,后更有ASM等字解码指令操作框架,介于jdk14-15之间。基于字解码操作,profiling实现了真正意义的动态monitor。这种profiling部署简单,性能高,但是功能不算非常强大。
第四代prfiling tools:出现jdk instrument。更有aspectJ。这时profiling功能得到增强,但是丢失了大量停留在jdk14的用户,同时部署也不简单。
Jwebap从这种划分,应该说,处于第三代和第四代之间,Jwebap-core采用第三代技术,plugin则很任意,介于第四代技术。
10 楼
leadyu
2008-02-26
jamon我了解不多,所以不好说,jwebap目前jdbc,method,http三个功能的plugin,应该说是jwebap-core初步完成以来实现的第一个扩展plugin的例子。
jwebap前期更专注于实现core部分,类静态增强,轨迹容器,和plugin管理,当core逐步成型后,我打算,把精力移到plugin这方面来,由于plugin我可以针对平台来做,所以,慢慢功能强大的多。
现在,有不少想法,初步打算实现的plugin:内存监控plugin,和JVM Reviewer。
后面,我还会开发一些基于测试人员使用的Debug的plugin。
总结:我希望jwebap一直能够做到针对不同人群和环境按需使用,同时在功能不断庞大后还能保持较轻的架子,这是一个好的profiling应该重视的
jwebap前期更专注于实现core部分,类静态增强,轨迹容器,和plugin管理,当core逐步成型后,我打算,把精力移到plugin这方面来,由于plugin我可以针对平台来做,所以,慢慢功能强大的多。
现在,有不少想法,初步打算实现的plugin:内存监控plugin,和JVM Reviewer。
后面,我还会开发一些基于测试人员使用的Debug的plugin。
总结:我希望jwebap一直能够做到针对不同人群和环境按需使用,同时在功能不断庞大后还能保持较轻的架子,这是一个好的profiling应该重视的
9 楼
ahuaxuan
2008-02-26
leadyu 写道
它不仅仅可以监控j2ee工程(包括EJB以及WebModule)的所有的jdbc调用,包括调用的堆栈(什么程序打开的连接),还可以监控方法的调用,以及http的请求,所有的这一切,只需要部署一个jar,以及配置一个配置文件。
你提供的功能jamon都有,但是你的界面看起来更好看,更耐看一点,赞一个。
jamon的界面太差劲了
8 楼
leadyu
2008-02-26
是的,js放在jar包
7 楼
galaxystar
2008-02-26
楼上的,界面是用ext做的吗?
6 楼
leadyu
2008-02-26
性能监控方面,也推荐下我的项目:jwebap.sourceforge.net
它不仅仅可以监控j2ee工程(包括EJB以及WebModule)的所有的jdbc调用,包括调用的堆栈(什么程序打开的连接),还可以监控方法的调用,以及http的请求,所有的这一切,只需要部署一个jar,以及配置一个配置文件。
另外,jwebap基于plugin架构,core部分基于jdk14,所有的监控组件都是plugin,大部分的plugin基于jdk14,以后会开发一些针对专属平台的plugin, 下阶段准备开发基于jdk15的memory_monitor_plugin。
它同时提供Web Console,界面也相当美观,全部通过jar包实现。下面贴几张出来:
它不仅仅可以监控j2ee工程(包括EJB以及WebModule)的所有的jdbc调用,包括调用的堆栈(什么程序打开的连接),还可以监控方法的调用,以及http的请求,所有的这一切,只需要部署一个jar,以及配置一个配置文件。
另外,jwebap基于plugin架构,core部分基于jdk14,所有的监控组件都是plugin,大部分的plugin基于jdk14,以后会开发一些针对专属平台的plugin, 下阶段准备开发基于jdk15的memory_monitor_plugin。
它同时提供Web Console,界面也相当美观,全部通过jar包实现。下面贴几张出来:
5 楼
galaxystar
2008-02-26
用来统计一个页面到底有多少数据库请求不错。
性能方面,我所在的公司更重视SQL review,(因为有非常牛的DBA,ORACLE ACE)。
低性能sql基本都会被review这关挡掉。
而数据库压力,是在定技术方案时,就已经有底的。如果sql数据吞吐量会超标,会在这个阶段想好对策。
性能方面,我所在的公司更重视SQL review,(因为有非常牛的DBA,ORACLE ACE)。
低性能sql基本都会被review这关挡掉。
而数据库压力,是在定技术方案时,就已经有底的。如果sql数据吞吐量会超标,会在这个阶段想好对策。
4 楼
ahuaxuan
2008-02-26
sorphi 写道
看起来不错。不过你是否问过DBA能够利用数据库提供的工具统计到类似的结果呢?或者说,对比后者,jamon有啥优点,有啥缺点?
这些问题我也想过
第一个问题,
数据库提供得工具来统计?
1 是两个部分要同时抓,数据库统计得是所有请求,一定程度上加大得数据库的压力,当然如果数据库压力不大的情况下这样做完全没有问题。
2 可以使用sniffer抓包来分析数据库的压力情况,但这种数据无法收集起来供我们所用。当然如果我们不需要这些数据,只是随便看看,遇到问题分析一下,使用sniffer不失为一个比较好的方案。
而对比jamon来说,jamon搜集的数据对我们来说失可以随意存储分析的,比如上面所说到的做一个负载分析系统,那么使用它来搜集数据对编程来说其实是非常方便的。
3 楼
sorphi
2008-02-26
看起来不错。不过你是否问过DBA能够利用数据库提供的工具统计到类似的结果呢?或者说,对比后者,jamon有啥优点,有啥缺点?
2 楼
ahuaxuan
2008-02-26
wener 写道
好东西,支持
用它我们可以做很多东西,比如性能监控系统,一个企业中必定有很多的app,那么所有的app都可以利用它来搜集请求的数据,不管是http请求,还是jdbc,这些数据都可以搜集起来,然后再统计分析,所以jamon是一个很有用的东西,虽然原理简单,但是自己开发一个成本也比较大,直接扩展它比如方便,真的是一个很好的东西,可惜没有人认识到它的价值
1 楼
wener
2008-02-26
好东西,支持
发表评论
-
过滤字符的性能调优?挤一挤还是有的
2010-05-29 05:54 3610/* *auth ... -
Master-Slave,Spring,Hibernate,故事曲折离奇,情结跌宕起伏
2009-02-05 13:49 8684/** *作者:张荣华 *日期 ... -
弃成见,反省,并重新认识struts.i18n.encoding
2008-12-24 15:42 3880[size=medium]之前和大家讨论了struts2.0中 ... -
关键字:查询,事务,粒度
2008-08-22 17:05 5138[size=medium]/** *作者: ... -
看看mina和memcached的联姻(适合不同语言客户端,高并发?)
2008-07-21 17:06 7984[size=medium]/** * 作者:张荣华 * 日 ... -
如何解决mysql的master-slave模式中ReplicationDriver的使用问题
2008-06-19 18:23 8220/** * 作者:张荣华 * 日期:2008-6-19 ... -
别装了,难道你们不想把properties直接注入到object中去(spring-plugin)?
2008-04-09 18:01 3651[size=small]/** *作者:张荣华(ahuaxu ... -
java同msn的通信,大家想想用途吧
2007-11-24 17:14 2513程序员的生活真是单调,除了编程还是编程,工作日 ... -
EAI企业应用集成场景及解决方案
2007-09-21 18:21 3154/** *作者:张荣华(ahuaxuan) *2007-9 ... -
quartz和应用的集群问题
2007-08-21 18:36 12817之前看到很多关于quartz的讨论,尤其是关于quar ... -
优化程序之前,可用Jamon来监测你的Spring应用
2007-08-14 18:14 8125/** *作者:张荣华(ahuaxuan) *2007-8-1 ... -
请问责任链真的是一种设计模式吗
2007-07-26 18:12 9414坛子上讨论设计模式的也挺多的,但是关于这个责任链模式还没有人提 ... -
把ActiveMQ的控制台整合到你的web程序中
2007-07-19 12:06 8830在使用ActiveMQ的时候把ActiveMQ的控制台整 ... -
设计模式之:解剖观察者模式
2007-07-17 16:12 6866[size=9] 论坛上很多人都 ... -
java邮件:在简单和复杂之间的方案
2007-07-11 18:07 7584/** *作者:张荣华(ahuaxu ... -
强强连手, 在模板中分页,看Freemarker和displaytag的结合
2007-07-09 09:22 6926/** *作者:张荣华(ahuaxuan) *2007-0 ... -
解惑:在spring+hibernate中,只读事务是如何被优化的。
2007-06-28 18:22 7622/** *作者:张荣华(ahuaxuan) *2007- ... -
让webwork零配置 第二章(实现)(实例已放出,大家可以下载运行)
2007-06-25 09:23 5708/** *作者:张荣华(ahuaxuan) *2007-0 ... -
让webwork2零配置,第一章(主贴再次更新)
2007-06-18 15:41 13379/** *作者:张荣华(ahuaxuan) *2007-0 ... -
Spring声明式事务管理源码解读之事务提交
2007-06-11 09:19 7285/** *作者:张荣华(ahuaxuan) *2007-0 ...
相关推荐
赠送jar包:jamon-runtime-2.3.1.jar; 赠送原API文档:jamon-runtime-2.3.1-javadoc.jar; 赠送源代码:jamon-runtime-2.3.1-sources.jar; 赠送Maven依赖信息文件:jamon-runtime-2.3.1.pom; 包含翻译后的API文档...
1. **JAMon**: JAMon是一个强大的Java性能监控框架,它可以监控SQL查询、方法调用、内存使用等,帮助开发者识别和优化性能瓶颈。JAMon Maven插件使得在Maven构建流程中集成性能监控变得简单,通过在pom.xml中配置...
总之,“jamon-sample.zip”提供的资源对于学习和使用JAMON,或者对Java应用程序进行性能优化的开发者来说,是一个宝贵的参考资料。通过深入研究和实践,可以更好地理解和利用JAMON这一强大的监控工具。
赠送jar包:jamon-runtime-2.3.1.jar; 赠送原API文档:jamon-runtime-2.3.1-javadoc.jar; 赠送源代码:jamon-runtime-2.3.1-sources.jar; 赠送Maven依赖信息文件:jamon-runtime-2.3.1.pom; 包含翻译后的API文档...
赠送jar包:jamon-runtime-2.4.1.jar; 赠送原API文档:jamon-runtime-2.4.1-javadoc.jar; 赠送源代码:jamon-runtime-2.4.1-sources.jar; 赠送Maven依赖信息文件:jamon-runtime-2.4.1.pom; 包含翻译后的API文档...
还在为找不到jar文件烦心吗,不用了到我空间来有你想要的,持续更新。。。 jamon-2.7.jar
赠送jar包:jamon-runtime-2.4.1.jar; 赠送原API文档:jamon-runtime-2.4.1-javadoc.jar; 赠送源代码:jamon-runtime-2.4.1-sources.jar; 赠送Maven依赖信息文件:jamon-runtime-2.4.1.pom; 包含翻译后的API文档...
JAMon.jar..............
hbase源码调试的时候,需要用它生成hbase-server模块的jamon模版代码,其官网需要翻墙
开发时使用的jar包,为您的使用提供更多的包!
Hbase源码编译时使用到得包.谢谢使用
**Jamon:Java的文本模板引擎** Jamon是一款强大的开源文本模板引擎,专门设计用于Java平台,能够生成动态HTML、XML...无论是初学者还是经验丰富的开发者,都可以从Jamon中受益,提升其在Web开发领域的效率和质量。
JAMon核心 com.jamonapi/jamon/2.81/jamon-2.81.jar
JAMon核心 com.jamonapi/jamon/2.80/jamon-2.80.jar
JAMon核心 com.jamonapi/jamon/2.0/jamon-2.0.jar
无论大家使用哪种监控工具,Automon 都能够将其与 AOP(AspectJ) 相结合以实现 Java 代码、JDK 以及依赖库监控声明。其可与其它各知名监控工具相协作,例如 JAMon、JavaSimon、Yammer Metrics 以及 StatsD 等,同时亦...
Jamon 是一个出色的配置文件解析器,可与您的应用程序一起使用。 配置文件可能如下所示: ip =127.0.0.1 port =123 address =${ip}:${port} base =www.myaddr.com [defaults] user =gabriel email =ga@stripetree...
火腿演示Jamon 的演示 - 开源类型安全模板引擎Jamon 是一个开源模板引擎,可确保类型安全。 Jamon 所做的是基于 Jamon 模板生成 Java 类,Java 编译器将帮助确保我们将正确的 Java 类型传递给模板。 我在这个演示中...
maven-jamon-plugin-2.2.2.0.jar