美文网首页
web应用性能监控:javamelody

web应用性能监控:javamelody

作者: hutou | 来源:发表于2016-10-28 12:54 被阅读1114次

前言

JavaMelody是一款可以监控Java应用(比如项目war,ear包)以及应用服务器(比如Tomcat或Jboss weblogic等等)。可以通过图表给出监控数据。

源码地址请戳这里
近期有web性能监控方面的需求,特此整理一下使用说明以利于备忘

简介

JavaMelody是一个监控Java或者JavaEE应用的工具。它并不会模拟用户请求而是监控用户的请求并且形成图表报告。
运行条件:

  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文件,增加如下的内容
    <!-- 进行运行情况监控 使用/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. 启动服务,在通过web查看监控结果
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文件
    <!-- 进行运行情况监控 使用/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. 运行服务器,在报告头部有PDF文档的输出链接,可以输出PDF报告

spring mvc整合

我们配置spring mvc的时候,在web.xml中会配置一个监听,这个监听回使web应用在读取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>

注意: 如果发生AOP之类的有冲突,就换一个配置文件:monitoring-spring.xml

报告发邮件

可以定期:日,周,月给指定的邮箱发运行报告。我的环境是在Tomcat7下进行配置

  1. 必须的Jar:放置在%TOMCAT_HOME%\lib目录下

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

  1. 配置server.xml文件,在Host节点下进行如下配置
        <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服务器地址"
                mail.smtp.user="发信用户"
                mail.from="发信用户"
                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配置文件的时候有可能发生AOP冲突的问题。这个问题主要是由于生产代理的方式冲突导致。
AOP的实现最简单的将就是生成一个代理对象来处理请求,在代理对象中织入切面逻辑。
Spring提供了两种方式来生成代理对象: JDKProxy和Cglib,在实际使用中具体使用那种方式?默认的策略是如果目标类是接口,则使用JDK动态代理技术,否则使用Cglib来生成代理。
我们可以在Spring的配置文件中配置使用那种代理模式

    <!-- 采用cglib来动态代理 -->
    <aop:aspectj-autoproxy proxy-target-class="true" />
    <!-- 标准的JDK 基于接口的代理 -->
    <aop:aspectj-autoproxy proxy-target-class="false" />

两种代理的区别

  1. cglib:基于类的代理
  2. JDK标准:基于接口的代理

相关文章

网友评论

      本文标题:web应用性能监控:javamelody

      本文链接:https://www.haomeiwen.com/subject/iijwyttx.html