戈思漢 高波
Java運行時間測量:JETM
JETM是一個Java程序執行時間測量工具。幫助開發人員定位Java程序中的性能問題。
http://jetm.void.fm/
該jetm是一個免費的jar包,能夠放入其餘項目中調用api來使用
一般咱們本身調試經過System.currentTimeMillis()打出程序段執行的時間,而如今
直接借用jetm就能像log4j 那樣隨意設置程序段執行時間。
簡單地嵌入代碼中:
public
class BusinessService {
private
static
final
EtmMonitor
etmMonitor =
EtmManager.getEtmMonitor();
public
void someMethod() {
EtmPoint point = etmMonitor.createPoint("BusinessService:someMethod");
try {
//
// some business code
//
nestedMethod();
}
finally {
point.collect();
}
}
public
void nestedMethod() {
EtmPoint point =
etmMonitor.createPoint("BusinessService:nestedMethod");
try {
// some business code
}
finally {
point.collect();
}
}
}
上面的簡單模式是要直接嵌入到目的代碼中,若是引用AOP的思路,就只要經過配置實現嵌入動做。
好比,和spring集成,自己spring就是依據AOP思路開發的框架。
下面以spring 2.x爲例,須要在spring的配置文件中添加jetm namespace和
jetm:runtime tag
下面爲整個spring的配置文。
<?xml
version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jetm="http://jetm.void.fm/schema/jetm_spring_config_1_2"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://jetm.void.fm/schema/jetm_spring_config_1_2 http://jetm.void.fm/schema/jetm_spring_config_1_2.xsd
">
<bean
id="orderClient"
class="etm.tutorial.fiveminute.client.OrderClient"
autowire="constructor"/>
<bean
id="groceryStore"
class="etm.tutorial.fiveminute.store.GroceryStoreImpl"
autowire="constructor"/>
<bean
id="stockDao" class="etm.tutorial.fiveminute.store.dao.StockDaoImpl"
autowire="constructor"/>
<!-- Step 4: Add performance monitoring -->
<!--
<jetm:monitoring>
<jetm:bean-pattern>*Dao</jetm:bean-pattern>
<jetm:bean-pattern>groceryStore</jetm:bean-pattern>
</jetm:monitoring>
-->
<!-- Step 5: Enable HTTP console -->
<!--
<jetm:console expanded="true"/>
-->
<jetm:runtime>
<jetm:features>
<!-- Step 6: Alter aggregation chain -->
<!--
<jetm:interval-buffer interval="1000"/>
-->
<!-- Step 7: Log raw performance results -->
<!--
<jetm:raw-data-log type="commons"/>
-->
</jetm:features>
</jetm:runtime>
</beans>
另外集成aop框架AspectWerkz
Aop.xml爲
<!DOCTYPE
aspectwerkz PUBLIC "-//AspectWerkz//DTD 2.0//EN"
"http://aspectwerkz.codehaus.org/dtd/aspectwerkz2.dtd">
<aspectwerkz>
<system
id="weaving-example">
<aspect
class="etm.contrib.aop.aspectwerkz.EtmAspectWerkzAspect"
deployment-model="perJVM">
<pointcut
name="etmExample" expression="
execution(public * etm.samples.aop.aspectwerkz.*Service.*(..))
OR
execution(public * etm.samples.aop.aspectwerkz.Dao+.*(..))
"/>
<advice
name="monitor" type="around" bind-to="etmExample"/>
</aspect>
</system>
</aspectwerkz>