<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 0,  comments - 17,  trackbacks - 0
    **
    *作者:張榮華(ahuaxuan)
    *2007-8-15
    *轉載請注明出處及作者
    */

    前兩天在看Spring內置的攔截器的時候,發現了一個之前沒有注意的類:org.springframework.aop.interceptor.JamonPerformanceMonitorInterceptor,好奇心促使我上網查了一下這個jamon。大概看了一下之后發現這個玩意還真挺好用的而且挺重要的,而且現在國內對它的介紹也很少,所以寫了一篇文章和大家分享。

    一,Jamon簡介:
    Jamon的全名是:Java Application Monitor。它是一個小巧的,免費的,高性能的,線程安全的性能監測工具。它可以用來測定系統的性能瓶頸,也可以用來監視用戶和應用程序之間的交互情況。 Jamon主要是用來檢測jee的應用程序。它最新的版本是2.1,可以用在1.4以上的jdk上。

    二,將jamon導入到你的應用程序中去
    首先下載jamon的開發包,見我的附件,同時你也可以去Sourceforge上自己下載。Sourceforge的下載地址為http://jamonapi.sourceforge.net。解壓之后可以得到一個jar包和一個war包。jar包是自己會用到的,而war包是一個例子(不要小看這個例子,待會也要把它導入到項目中)。把war包之間丟到服務器上,訪問:localhost:8080/jamon就可以看到這個例子了,這個例子是一個簡單的性能監控系統。

    接著把例子中的所有的包都導入到項目中,并把war包中的jsp和images還有css都考到項目中,比如新建一個目錄叫monitor(它和WEB-INF是同級目錄)。

    三,正確配置自己的應用
    我們在性能監測的時候最監測的就是頁面的訪問率和類中方法的訪問率。所以在這一部分主要講解一下如何監測自己的頁面和類中方法的訪問。

    1, 檢測自己的頁面訪問率
    首先我們需要在web.xml中添加一個filter,這個filter就是用來判斷哪些頁面需要被監視的,如下所示:
    Java代碼 復制代碼
    1. <filter>   
    2.         <filter-name>JAMonFilter</filter-name>   
    3.         <filter-class>com.easywebwork.filter.EasyPageMonFilter</filter-class>   
    4.     </filter>   
    5.     <filter-mapping>   
    6.         <filter-name>JAMonFilter</filter-name>   
    7.         <url-pattern>/*</url-pattern>   
    8.     </filter-mapping>  
    接下來我們看看這個filter的寫法:
    Java代碼 復制代碼
    1. /**  
    2.  * @author 張榮華(ahuaxuan)  
    3.  *  
    4.  * @since 2007-8-13  
    5.  */  
    6. public class PageMonFilter extends JAMonFilter{   
    7.   
    8.     private static final long serialVersionUID = 5746197114960908454L;   
    9.   
    10.     public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {   
    11.          Monitor allPages = MonitorFactory.start(new MonKeyImp("org.easywebwork.allPages",getURI(request),"ms."));   
    12.          //這里就是我們要監視的所有的頁面的配置   
    13.          Monitor monitor = MonitorFactory.start(getURI(request));   
    14.          //這里就是我們要監視的某個頁面的配置   
    15.          try {   
    16.           filterChain.doFilter(request, response);   
    17.          } finally {   
    18.           monitor.stop();   
    19.           allPages.stop();   
    20.          }   
    21.        }   
    22.   
    23.        protected String getURI(ServletRequest request) {   
    24.          if (request instanceof HttpServletRequest) {   
    25.            return ((HttpServletRequest) request).getRequestURI();   
    26.          }  else {   
    27.            return "Not an HttpServletRequest";   
    28.          }   
    29.        }   
    30.   
    31.        private FilterConfig filterConfig = null;   
    32.           
    33. }}  

    這個類看上去很簡單,其實也挺簡單的,就是得到uri,然后把它注冊到MonitorFactory類中。這樣只要我們去訪問剛才創建的monitor目錄下的jsp就可以看到性能監測頁面了。

    2, ,接下來我們看看在使用spring的情況下如何監測一個bean的方法調用。Spring也提供了對Jamon的支持(spring支持的東西還真多啊),也就是文章開頭提出的那個攔截器,為了給我們的bean加上攔截器,我們在spring的applicationcontext配置文件中加入如下語句:
    Java代碼 復制代碼
    1. <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">   
    2.         <property name="beanNames">   
    3.             <list>   
    4.                 <value>userService</value>                 
    5.             </list>   
    6.         </property>   
    7.         <property name="interceptorNames">   
    8.             <list>   
    9.                 <value>jamonInterceptor</value>   
    10.             </list>   
    11.         </property>   
    12.     </bean>   
    13.        
    14.     <bean id="jamonInterceptor" class="org.springframework.aop.interceptor.JamonPerformanceMonitorInterceptor">   
    15. </bean>  

    上面這個是典型的spring的aop的配置,如果對spring的aop配置不了解的可以去看一下spring中文文檔,當然如果不想了解的話即使直接把這段配置拷到自己的項目中也是可以直接使用的。

    還有一個步驟就是在你的log4j.properties中加入這句代碼:
    Java代碼 復制代碼
    1. log4j.logger.org.springframework.aop.interceptor.JamonPerformanceMonitorInterceptor = TRACE  

    如果沒有這一行,那么這個攔截器是不會把方法調用的信息向MonitorFactory注冊的。

    只需要這些步驟,userservice中的方法在調用的時候就可以被攔截,然后將其注冊到MonitorFactory中去了。

    所有的配置完成之后我們來看一下效果吧:
    http://www.javaeye.com/topics/download/b2bac96e-6c18-4340-b7e0-f84c7bb6adca從這個圖上我們可以看到,所有頁面被訪問的次數,UserService中的getAllUsers被調用的次數,最右邊的是訪問時間。這只是整個圖的一部分,當然這個頁面中也包括每一個頁面被訪問的次數和第一次訪問的時間等等。下載附件運行,就可以看到所有的頁面了。

    三,總結
    根據以上的步驟,我們就可以監測我們的程序了,應用程序中哪些頁面被訪問的多,哪些頁面被訪問的少,哪些方法被訪問的多,哪些方法被訪問的少,以及訪問高峰期集中在什么時間等等,有了這些參數,我們更可以有針對性的對應用程序進行優化了,比如說某個頁面訪問比較頻繁,我就可以用ehcache或oscache給這個頁面做一個緩存。如果某個方法的訪問比較頻繁那就看看這個方法能否進一步優化,是需要異步,還是需要緩存,還是需要其他等等,總之有了jamon可以給我們帶來更多的便捷,既可以讓我們知道我們的客戶的行為,也可以讓我們知道我們開發的程序的“能力”。

    其實本文提供的只是對頁面和方法調用的監控,但是jamon可以提供更多功能,比如說sql語句的監控等等,這就需要我們共同去發掘了。

    附件中包括了一個easywebwork的例子,我把jamon導入到這個例子工程中去,大家可以直接下載運行觀看效果。Easywebwork是一個旨在減少webwork2.2.x系列的xml配置文件的項目,
    如果對這個主題感興趣請到
    http://www.javaeye.com/topic/91614
    http://www.javaeye.com/topic/93814
    參加討論。
    posted on 2008-03-14 14:40 xyz 閱讀(771) 評論(0)  編輯  收藏 所屬分類: 網絡文摘

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    留言簿

    隨筆檔案(1)

    文章分類(44)

    文章檔案(46)

    收藏夾(1)

    Adobe

    AOP

    API

    appServer

    BI

    c

    • c-free
    • codeblocks
    • codelite
    • CodeLite IDE 是一個強大的開源,跨平臺的 C/C++整合開發環境. 支持包括 Windows、Linux 和 Mac 系統下運行
    • codelite官網
    • dev-c++
    • Dev-C++是一個C&C++開發工具,它是一款自由軟件,遵守GPL協議。
    • GCC
    • GCC 原名為 GNU C 語言編譯器(GNU C Compiler),因為它原本只能處理 C語言。GCC 很快地擴展,變得可處理 C++。之后也變得可處理 Fortran、Pascal、Objective-C、Java, 以及 Ada 與其他語言。

    Cache

    CMS

    DB

    eclipse

    FreeMarker

    hibernate

    html5

    ibatis

    java

    jquery

    js

    json

    Linux

    Log

    mail server

    mobile

    mysql

    oauth

    openID

    other

    PHP

    portal

    report

    Scheduler

    schema

    Security

    SOA

    spring

    struts

    UI原型設計

    w3c

    Wap

    webservice

    xml

    供應鏈管理

    博客鏈接

    好網站

    工作流

    開源網

    招聘

    插件下載

    操作系統

    構建可伸縮的系統

    構建工具

    測試

    • IETest
    • IE官網
    • OpenSTA
    • Siege
    • Siege是一個壓力測試和評測工具,設計用于WEB開發這評估應用在壓力下的承受能力

    游戲

    源碼托管

    經營

    資源

    金融/財務

    搜索

    •  

    最新評論

    主站蜘蛛池模板: 亚洲视频在线观看免费| 免费一级全黄少妇性色生活片| 精品熟女少妇aⅴ免费久久| 免费看男女下面日出水视频| 真人无码作爱免费视频| 四虎影视永久免费视频观看| 亚洲AⅤ男人的天堂在线观看| 日韩人妻无码免费视频一区二区三区 | 亚洲人成亚洲精品| 嫩草影院在线播放www免费观看| 亚洲国产第一站精品蜜芽| 精品在线免费观看| 67pao强力打造67194在线午夜亚洲| 最近免费字幕中文大全视频| 亚洲综合伊人制服丝袜美腿| 大学生美女毛片免费视频| 高清一区二区三区免费视频 | 91亚洲视频在线观看| 国语成本人片免费av无码| 亚洲.国产.欧美一区二区三区| 午夜亚洲福利在线老司机| 中国videos性高清免费| 亚洲男女性高爱潮网站| 全免费一级午夜毛片| 国产精品内射视频免费| 亚洲日本中文字幕| 成年18网站免费视频网站| 九九九精品视频免费| 免费精品国产自产拍在 | 午夜一区二区免费视频| 九九综合VA免费看| 久久国产亚洲精品无码| 老司机永久免费网站在线观看| 九九久久国产精品免费热6| 亚洲精品国产福利片| 国产成人免费a在线视频色戒| 成人性生交大片免费看好| 国产成人亚洲综合一区| 亚洲精品白浆高清久久久久久| 无码中文在线二区免费| jizz免费观看|