web應(yīng)用性能監(jiān)控:javamelody

前言

JavaMelody是一款可以監(jiān)控Java應(yīng)用(比如項目war,ear包)以及應(yīng)用服務(wù)器(比如Tomcat或Jboss weblogic等等)??梢酝ㄟ^圖表給出監(jiān)控數(shù)據(jù)。

源碼地址請戳這里
近期有web性能監(jiān)控方面的需求,特此整理一下使用說明以利于備忘

簡介

JavaMelody是一個監(jiān)控Java或者JavaEE應(yīng)用的工具。它并不會模擬用戶請求而是監(jiān)控用戶的請求并且形成圖表報告。
運行條件:

  1. java 1.6或者更高
  1. servlet 2.4或者更高
  2. 依賴 JRobin v1.5.9生成圖表
  3. 依賴iText v2.1.7生成PDF文件
  4. 支持多種語言,包括中文

起步

  1. 修改maven配置文件
        <dependency>
            <groupId>net.bull.javamelody</groupId>
            <artifactId>javamelody-core</artifactId>
            <version>1.56.0</version>
        </dependency>   
  1. 修改web.xml文件,增加如下的內(nèi)容
    <!-- 進行運行情況監(jiān)控 使用/monitoring 進行查看-->
    <filter>
        <filter-name>javamelody</filter-name>
        <filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
        <async-supported>true</async-supported>
    </filter>
    <filter-mapping>
        <filter-name>javamelody</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>ASYNC</dispatcher>
    </filter-mapping>
    <listener>
        <listener-class>net.bull.javamelody.SessionListener</listener-class>
    </listener>
  1. 啟動服務(wù),在通過web查看監(jiān)控結(jié)果
http://<host>/<context>/monitoring

輸出PDF報告

  1. 修改maven配置文件,增加iText依賴
        <dependency>
            <groupId>net.bull.javamelody</groupId>
            <artifactId>javamelody-core</artifactId>
            <version>1.56.0</version>
        </dependency>
        <!-- itext, option to add PDF export -->
        <dependency>
            <groupId>com.lowagie</groupId>
            <artifactId>itext</artifactId>
            <version>2.1.7</version>
            <exclusions>
                <exclusion>
                    <artifactId>bcmail-jdk14</artifactId>
                    <groupId>bouncycastle</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>bcprov-jdk14</artifactId>
                    <groupId>bouncycastle</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>bctsp-jdk14</artifactId>
                    <groupId>bouncycastle</groupId>
                </exclusion>
            </exclusions>
        </dependency>
  1. 修改web.xml文件
    <!-- 進行運行情況監(jiān)控 使用/monitoring 進行查看-->
    <filter>
        <filter-name>javamelody</filter-name>
        <filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>javamelody</filter-name>
        <url-pattern>/servlet1/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>javamelody</filter-name>
        <url-pattern>/servlet2/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>javamelody</filter-name>
        <url-pattern>/monitoring</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>ASYNC</dispatcher>      
    </filter-mapping>
    <listener>
        <listener-class>net.bull.javamelody.SessionListener</listener-class>
    </listener>
  1. 運行服務(wù)器,在報告頭部有PDF文檔的輸出鏈接,可以輸出PDF報告

spring mvc整合

我們配置spring mvc的時候,在web.xml中會配置一個監(jiān)聽,這個監(jiān)聽回使web應(yīng)用在讀取web.xml時,加載指定的spring文件。

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

加載指定的javamelody配置文件

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:applicationContext.xml
            classpath:net/bull/javamelody/monitoring-spring-datasource.xml
        </param-value>
    </context-param>

注意: 如果發(fā)生AOP之類的有沖突,就換一個配置文件:monitoring-spring.xml

報告發(fā)郵件

可以定期:日,周,月給指定的郵箱發(fā)運行報告。我的環(huán)境是在Tomcat7下進行配置

  1. 必須的Jar:放置在%TOMCAT_HOME%\lib目錄下

activation-1.1.1.jar
javax.mail-1.5.2.jar

  1. 配置server.xml文件,在Host節(jié)點下進行如下配置
        <Context docBase="appName" path="/appName" reloadable="true" source="org.eclipse.jst.jee.server:hcmserver">
            <Resource auth="Container" type="javax.mail.Session" name="mail/MySession" 
                mail.smtp.host="SMTP服務(wù)器地址"
                mail.smtp.user="發(fā)信用戶"
                mail.from="發(fā)信用戶"
                mail.smtp.auth="true"
                mail.smtp.password="密碼"     
            />     
            <Parameter name="javamelody.admin-emails" value="收信郵箱1,收信郵箱2,收信郵箱3" override="false" />  
            <Parameter name="javamelody.mail-session" value="mail/MySession" override="false" />  
            <Parameter name="javamelody.mail-periods" value="day,week,month" override="false" />                
        </Context>
  1. 測試
    有一個測試命令可以使用,在瀏覽器訪問如下地址
/monitoring?action=mail_test

附加

在加載monitoring-spring配置文件的時候有可能發(fā)生AOP沖突的問題。這個問題主要是由于生產(chǎn)代理的方式?jīng)_突導(dǎo)致。
AOP的實現(xiàn)最簡單的將就是生成一個代理對象來處理請求,在代理對象中織入切面邏輯。
Spring提供了兩種方式來生成代理對象: JDKProxy和Cglib,在實際使用中具體使用那種方式?默認的策略是如果目標類是接口,則使用JDK動態(tài)代理技術(shù),否則使用Cglib來生成代理。
我們可以在Spring的配置文件中配置使用那種代理模式

    <!-- 采用cglib來動態(tài)代理 -->
    <aop:aspectj-autoproxy proxy-target-class="true" />
    <!-- 標準的JDK 基于接口的代理 -->
    <aop:aspectj-autoproxy proxy-target-class="false" />

兩種代理的區(qū)別

  1. cglib:基于類的代理
  2. JDK標準:基于接口的代理
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容