前言
JavaMelody是一款可以监控Java应用(比如项目war,ear包)以及应用服务器(比如Tomcat或Jboss weblogic等等)。可以通过图表给出监控数据。
源码地址请戳这里
近期有web性能监控方面的需求,特此整理一下使用说明以利于备忘
简介
JavaMelody是一个监控Java或者JavaEE应用的工具。它并不会模拟用户请求而是监控用户的请求并且形成图表报告。
运行条件:
- java 1.6或者更高
- servlet 2.4或者更高
- 依赖 JRobin v1.5.9生成图表
- 依赖iText v2.1.7生成PDF文件
- 支持多种语言,包括中文
起步
- 修改maven配置文件
<dependency>
<groupId>net.bull.javamelody</groupId>
<artifactId>javamelody-core</artifactId>
<version>1.56.0</version>
</dependency>
- 修改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>
- 启动服务,在通过web查看监控结果
http://<host>/<context>/monitoring
输出PDF报告
- 修改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>
- 修改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>
- 运行服务器,在报告头部有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下进行配置
- 必须的Jar:放置在%TOMCAT_HOME%\lib目录下
activation-1.1.1.jar
javax.mail-1.5.2.jar
- 配置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>
- 测试
有一个测试命令可以使用,在浏览器访问如下地址
/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" />
两种代理的区别
- cglib:基于类的代理
- JDK标准:基于接口的代理