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

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

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

    paulwong

    優化程序之前,可用Jamon來監測你的Spring應用

    /**
    *作者:張榮華(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就是用來判斷哪些頁面需要被監視的,如下所示:
    <filter>
            
    <filter-name>JAMonFilter</filter-name>
            
    <filter-class>com.easywebwork.filter.EasyPageMonFilter</filter-class>
        
    </filter>
        
    <filter-mapping>
            
    <filter-name>JAMonFilter</filter-name>
            
    <url-pattern>/*</url-pattern>
        
    </filter-mapping>

    接下來我們看看這個filter的寫法:

    /**
    *
    @author 張榮華(ahuaxuan)
    *
    *
    @since 2007-8-13
    */

    public class PageMonFilter extends JAMonFilter{

    private static final long serialVersionUID = 5746197114960908454L;

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
    Monitor allPages
    = MonitorFactory.start(new MonKeyImp("org.easywebwork.allPages",getURI(request),"ms."));
    //這里就是我們要監視的所有的頁面的配置
    Monitor monitor = MonitorFactory.start(getURI(request));
    //這里就是我們要監視的某個頁面的配置
    try {
    filterChain.doFilter(request, response);
    }
    finally {
    monitor.stop();
    allPages.stop();
    }

    }


    protected String getURI(ServletRequest request) {
    if (request instanceof HttpServletRequest) {
    return ((HttpServletRequest) request).getRequestURI();
    }
    else {
    return "Not an HttpServletRequest";
    }

    }


    private FilterConfig filterConfig = null;

    }
    }

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

    2, 接下來我們看看在使用spring的情況下如何監測一個bean的方法調用。
    Spring也提供了對Jamon的支持(spring支持的東西還真多啊),也就是文章開頭提出的那個攔截器,為了給我們的bean加上攔截器,我們在spring的applicationcontext配置文件中加入如下語句:

    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    <property name="beanNames">
    <list>
    <value>userService</value>
    </list>
    </property>
    <property name="interceptorNames">
    <list>
    <value>jamonInterceptor</value>
    </list>
    </property>
    </bean>

    <bean id="jamonInterceptor" class="org.springframework.aop.interceptor.JamonPerformanceMonitorInterceptor">
    </bean>

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

    還有一個步驟就是在你的log4j.properties中加入這句代碼:

    log4j.logger.org.springframework.aop.interceptor.JamonPerformanceMonitorInterceptor = TRACE


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

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

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

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

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

    附件中包括了一個easywebwork的例子,我把jamon導入到這個例子工程中去,大家可以直接下載運行觀看效果。Easywebwork是一個旨在減少webwork2.2.x系列的xml配置文件的項目。

  • JamonSample.rar (3.7 MB)
  • 描述: 由于上傳文件大小有限制,所以需要同學們自己添加一下jar包: spring,common-logging,log4j,common-collections activation, common-lang

     

  • lib.rar (3.3 MB)
  • 描述: 第二組包包括 spring,common-logging,log4j,common-collections activation, common-lang

     

  • posted on 2012-01-25 16:32 paulwong 閱讀(754) 評論(0)  編輯  收藏 所屬分類: 緩存

    主站蜘蛛池模板: 在线观看亚洲视频| 国产2021精品视频免费播放| 亚洲国产精品一区二区第一页 | 三级网站在线免费观看| 成全高清在线观看免费| 亚洲男女性高爱潮网站| 日本一道本高清免费| 日本免费人成网ww555在线| 亚洲中文字幕乱码AV波多JI| 免费A级毛片无码无遮挡内射| 在线观看免费亚洲| 久久亚洲精品无码VA大香大香| 日本大片在线看黄a∨免费| 久久久精品午夜免费不卡| 亚洲国产香蕉碰碰人人| 免费无码中文字幕A级毛片| 亚洲av丰满熟妇在线播放| 国产成人免费爽爽爽视频| a毛片免费全部在线播放**| 亚洲三级高清免费| 亚洲AV无码日韩AV无码导航| 日本不卡高清中文字幕免费| 99免费观看视频| 国产区在线免费观看| 亚洲码欧美码一区二区三区| 亚洲国产精品久久久久久| 亚洲AⅤ优女AV综合久久久| 成视频年人黄网站免费视频| 精品国产麻豆免费人成网站| 美女被免费视频网站a| 亚洲精品二三区伊人久久| 亚洲天天在线日亚洲洲精| 国产福利电影一区二区三区,亚洲国模精品一区 | 亚洲国产成人精品电影| 亚洲一区二区女搞男| 成人性生交大片免费看好| 国产亚洲精彩视频| 激情五月亚洲色图| 亚洲国产精品网站久久| 亚洲国产精品婷婷久久| 亚洲国产成人一区二区精品区|