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

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

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

    Terry.Li-彬

    虛其心,可解天下之問;專其心,可治天下之學(xué);靜其心,可悟天下之理;恒其心,可成天下之業(yè)。

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks
    前兩天在看Spring內(nèi)置的攔截器的時候,發(fā)現(xiàn)了一個之前沒有注意的 類:org.springframework.aop.interceptor.JamonPerformanceMonitorInterceptor, 好奇心促使我上網(wǎng)查了一下這個jamon。大概看了一下之后發(fā)現(xiàn)這個玩意還真挺好用的而且挺重要的,而且現(xiàn)在國內(nèi)對它的介紹也很少,所以寫了一篇文章和大 家分享。

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

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

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

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

    1, 檢測自己的頁面訪問率
    首先我們需要在web.xml中添加一個filter,這個filter就是用來判斷哪些頁面需要被監(jiān)視的,如下所示:
    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. ?????????//這里就是我們要監(jiān)視的所有的頁面的配置??
    13. ?????????Monitor?monitor?=?MonitorFactory.start(getURI(request));??
    14. ?????????//這里就是我們要監(jiān)視的某個頁面的配置??
    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. }}??

    這個類看上去很簡單,其實(shí)也挺簡單的,就是得到uri,然后把它注冊到MonitorFactory類中。這樣只要我們?nèi)ピL問剛才創(chuàng)建的monitor目錄下的jsp就可以看到性能監(jiān)測頁面了。

    2, ,接下來我們看看在使用spring的情況下如何監(jiān)測一個bean的方法調(diào)用。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中文文檔,當(dāng)然如果不想了解的話即使直接把這段配置拷到自己的項(xiàng)目中也是可以直接使用的。

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

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

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

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

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

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

    附件中包括了一個easywebwork的例子,我把jamon導(dǎo)入到這個例子工程中去,大家可以直接下載運(yùn)行觀看效果。Easywebwork是一個旨在減少webwork2.2.x系列的xml配置文件的項(xiàng)目,
    如果對這個主題感興趣請到
    http://www.javaeye.com/topic/91614
    http://www.javaeye.com/topic/93814
    參加討論。
    posted on 2010-09-29 10:39 禮物 閱讀(263) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。

    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 青草草在线视频永久免费| 免费观看久久精彩视频| 国产精品亚洲一区二区三区在线观看| 99在线观看精品免费99| 香蕉成人免费看片视频app下载| 国产偷伦视频免费观看| 久久免费视频网站| 久久精品国产这里是免费| 3d成人免费动漫在线观看| 无码国产精品一区二区免费虚拟VR| 日韩版码免费福利视频| 日本一区二区三区免费高清| 午夜毛片不卡高清免费| 女人18毛片水真多免费播放| 国产成人免费网站在线观看| 免费在线观看理论片| 国产成人高清亚洲| 亚洲精品乱码久久久久久蜜桃不卡| 久久精品国产96精品亚洲| 亚洲高清无在码在线无弹窗| 亚洲综合偷自成人网第页色| 亚洲va中文字幕| 亚洲免费日韩无码系列| 亚洲电影免费在线观看| 国产片AV片永久免费观看| 精品国产免费观看| 国产亚洲情侣一区二区无码AV| 国产无遮挡色视频免费视频| 亚洲精品色婷婷在线影院| 国产伦精品一区二区三区免费下载 | 久久91亚洲精品中文字幕| 亚洲美女视频一区| 亚洲欧美成人av在线观看| 午夜免费国产体验区免费的| 美女在线视频观看影院免费天天看| 足恋玩丝袜脚视频免费网站| 日本高清免费不卡视频| 亚洲色偷偷综合亚洲AVYP| 亚洲国产天堂久久综合网站 | 亚洲视频一区二区| 久久av无码专区亚洲av桃花岛|