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 閱讀(773) 評論(0)  編輯  收藏 所屬分類: 網絡文摘

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          留言簿

          隨筆檔案(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開發這評估應用在壓力下的承受能力

          游戲

          源碼托管

          經營

          資源

          金融/財務

          搜索

          •  

          最新評論

          主站蜘蛛池模板: 黎平县| 昌邑市| 百色市| 玉门市| 中西区| 阜新| 西林县| 昆山市| 砀山县| 东乡族自治县| 黔东| 额尔古纳市| 南昌市| 蓝田县| 通渭县| 阿克| 乃东县| 墨玉县| 文昌市| 肇庆市| 烟台市| 康平县| 调兵山市| 泰和县| 营口市| 日土县| 上思县| 稷山县| 麻阳| 阳朔县| 视频| 林州市| 页游| 盘锦市| 威宁| 太仆寺旗| 铅山县| 大竹县| 双流县| 镇康县| 合江县|