JavaMelody应用监控使用指南

原文:《JavaMelody应用监控使用指南

前言

 本文参考JavaMelody的UserGuide编写,部分文字均来自文档,添加有个人理解。并进行实践操作

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

  软件下载参考google网址:http://code.google.com/p/javamelody/downloads/list

  它支持对Java的内存使用,垃圾回收,Session,JDBC,SQL,http请求,业务方法等等多种信息的监控。

 JavaMelody介绍

  JavaMelody用于对Java应用或者应用服务器的QA以及开发环境的监控。它并不是一个模拟请求类似JMeter的压力测试工具,而是一个衡量并且计算在应用上的操作信息的工具,也就是说,它只负责对行为进行监控,而不负责触发操作。JavaMelody基于请求统计生成模拟图表,并为我们的应用程序在QA或者开发上提供下面的帮助:

  1 给出平均的响应时间以及执行数

  2 在某些操作趋势变得严重前给出提示

  3 优化响应

  4 找出响应瓶颈的根本

  5 证实优化策略的效果

JDK版本要求:需要Java JDK在1.6或者1.6以上。

  支持在以下应用服务器的部署以及监控:

    servlet API在2.4以上

    Tomcat 5.5 6 或者7

    GlassFish v2或v3

    JBoss 4,5,6,7

    Jonas 4或5

    Jetty 6或7

    WebLogic 9,10,11

  如果想要监控其他的服务器需要安装一些插件,详情阅读UserGuide

  使用的浏览器最好是 Firefox Chrome或IE9

  JavaMelody安装

  安装测试JavaMelody需要一个web应用,一个javaMelody的war包,以及两个jar包。

  1 web应用:我这里提供了一个简单的样例,就是一个web工程,里面包含一个index.html

  2 javamelody.war:这些文件都在google上面可以下载,但是考虑到一些没有FQ的朋友,这里保存在百度云上了。

javamelody.war 这是用于部署使用的应用包

javamelody.zip 这里面包含了userGuide使用手册以及源码

  3 需要的两个jar包,位于zip包里面。

  4 测试使用的应用包也放到这里了

  需要注意的是,JavaMelody监控是非常简单的,部署也很快。通常JavaMelody与应用的整个都是软件自动完成的,并不需要用户做任何的操作。只需要修改一点配置文件即可。监控与应用整合一般都不会超过10秒钟,通常都会自动的被编译环境发现:你需要做的知识拷贝两个jar包,添加10行xml的代码。如果你发布的应用程序不是一个相对目录,而是war包,那么就需要阅读以下下面的章节了。如果是ear(EJBs),那么就需要去阅读以下User Guide Advanced的一些相关内容了。

  1 jar包

  在javamelody.zip中有两个jar包,一个是javamelody.jar,另一个是jrobin-x.jar。拷贝这两个jar包到webapp中对应war包的WEB-INF/lib目录下。或者使用Maven,添加javamelody-core 依赖文件pom.xml。


2 web.xml文件

  如果你的servletAPI是3.0的,想tomcat7 glassfish v3 jboss6等等,那么就需要配置xml了。不然的话,需要在应用war包的web.xml中添加如下的filter

  1 <filter>
2 <filter-name>monitoring</filter-name>
3 <filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
4 </filter>
5 <filter-mapping>
6 <filter-name>monitoring</filter-name>
7 <url-pattern>/*</url-pattern>
8 </filter-mapping>
9 <listener>
10 <listener-class>net.bull.javamelody.SessionListener</listener-class>
11 </listener>

如果是servlet3.0,还需要添加<async-supported>true</async-supported> 来支持异步请求

  查看监控结果

  现在就可以启动应用服务器打开网址查看监控效果了。网址:http://<host>/<context>/monitoring

1   <host>是web应用服务器的部署IP,通常是localhost:8080 或者127.0.0.1:8080具体看你自己的应用服务器
2   <context>是你的web应用的名字。

  注意:

  如果在启动过程中出错,出错信息含有window server,那么检查一下你是否使用了其他版本的server。并且添加系统参数-Djava.awt.headless=true

  如果使用到额是tomcat,那么在conf/catalina.properties中添加java.awt.headless=true

  然后重启服务器。

  4 JavaMelody初探

  由于我的这个测试使用的war包程序只有一个简单的页面,因此只能测试http请求的连接数了,手动刷新页面就会发送http请求,可以再下面的列表中看到点击的次数。以及请求的类型。

  再次启动后发现数据都还在,一定是存储在了本地的某个地方。

  查阅资料发现缓存文件都存放在tomcat下的temp中了,目录是tomcat/temp/javamelody/应用名字_主机名字

  删除这两个文件,再次启动tomcat,可以发现数据清空了。

  这也就证明所有的记录的监控信息都在这个文件夹中,那么都有什么呢?

  虽然都是RRD的文件,无法直接读取,但是从名字就可以看到它都记录什么数据。比如sql 线程数,内存等等。

 

JavaMelody Maven 配置 及简单应用

原文:三目君的《JavaMelody Maven 配置 及简单应用

前言:

JavaMelody github 源码主页

JavaMelody github Wiki主页(请查看此文)

wiki中有详细解说,不过是英文,可能有人看不懂。也可以查看上面第一篇文章,它的后两篇文章是监控sql和spring struts的。

添加JavaMelody到项目中

jar包(无maven的项目使用)

复制文件 javamelody.jarjrobin-x.jar, 到你的项目中的 WEB-INF/lib 目录下。

配置maven

  1 <!--JavaMelody 核心jar包-->
2 <dependency>
3 <groupId>net.bull.javamelody</groupId>
4 <artifactId>javamelody-core</artifactId>
5 <version>1.57.0</version>
6 </dependency>
7 <!-- itext, 用于支持 PDF 导出 -->
8 <dependency>
9 <groupId>com.lowagie</groupId>
10 <artifactId>itext</artifactId>
11 <version>2.1.7</version>
12 <exclusions>
13 <exclusion>
14 <artifactId>bcmail-jdk14</artifactId>
15 <groupId>bouncycastle</groupId>
16 </exclusion>
17 <exclusion>
18 <artifactId>bcprov-jdk14</artifactId>
19 <groupId>bouncycastle</groupId>
20 </exclusion>
21 <exclusion>
22 <artifactId>bctsp-jdk14</artifactId>
23 <groupId>bouncycastle</groupId>
24 </exclusion>
25 </exclusions>
26 </dependency>
27 <!-- 用于支持xml,json导出 -->
28 <dependency>
29 <groupId>com.thoughtworks.xstream</groupId>
30 <artifactId>xstream</artifactId>
31 <version>1.4.2</version>
32 </dependency>
33 <!-- 监控核心类,包含在JavaMelody 核心jar包,不用单独添加 -->
34 <dependency>
35 <groupId>org.jrobin</groupId>
36 <artifactId>jrobin</artifactId>
37 <version>1.5.9</version>
38 </dependency>

非maven配置项目 jar下载地址:

性能监控采用javaMelody,压力测试软件采用Apache jmeter。记录配置及使用以备后查

导入javamelody.jar和jrobin-1.5.9.1.jar两个包到web项目

所需资源下载地址:http://download.csdn.net/detail/zhanyingf15/8487421

配置web.xml

在web.xml添加

  1 <filter>
2 <filter-name>javamelody</filter-name>
3 <filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
4 <async-supported>true</async-supported>
5 </filter>
6 <filter-mapping>
7 <filter-name>javamelody</filter-name>
8 <url-pattern>/*</url-pattern>
9 <dispatcher>REQUEST</dispatcher>
10 <dispatcher>ASYNC</dispatcher>
11 </filter-mapping>
12 <listener>
13 <listener-class>net.bull.javamelody.SessionListener</listener-class>
14 </listener>

<async-supported>true</async-supported><dispatcher>ASYNC</dispatcher> 用于在servlet3.0中处理异步请求,一般我们用的是servlet2.3 或者 2.4 ,不使用这两个参数即可。

启动项目

按你的方式启动项目即可。

访问监控

你的项目根目录访问路径+/monitoring 即可。
例如:http://localhost:8080/test-project/monitoring

可看到如下结果

重新定义访问路径及设置密码

  1 <filter>
2 <filter-name>javamelody</filter-name>
3 <filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
4 <init-param>
5 <param-name>monitoring-path</param-name>
6 <param-value>/moni</param-value>
7 </init-param>
8 <init-param>
9 <param-name>authorized-users</param-name>
10 <param-value>user1:password1,user2:password2,user3:password3...</param-value>
11 </init-param>
12 <!--<async-supported>true</async-supported>-->
13 </filter>
设置参数说明:

可以使用多各方式设置参数。
1. 可以在web.xml上下文中添加以javamelody.开头的参数。
2. 在过滤器配置的servletContext中添加的参数也可以(没用过)
3. 直接在过滤器中添加初始化参数(上文中用到的方法)

其实有很多参数可以设置的。JavaMelody中有一个枚举类public enum net.bull.javamelody.Parameter,它里面的所有属性都可以设置为参数。可以慢慢去发掘。

JavaMelody监控SQL

原文:xingoo: 《JavaMelody监控SQL

在网上搜索很多资料,仅有开源社区上的两篇帖子有点帮助,但对于监控SQL还是有很多问题,有不少的网友遇到了跟我同样的问题,监控页面打开可就是监控不到数据,SQL一栏无论如何都是0,要不就是NaN。

  这个问题其实还是因为数据源的部分没有配置正确,这里介绍两种配置的方式。

  第一种,直接配置数据源,添加额外的jdbc驱动

  按照UserGuide的文档来说,可以使用Jndi配置数据源的方式,比如如果使用Hibernate,那么在hinernate.cfg.xml中配置

  1  <property name="hibernate.connection.driver_class">net.bull.javamelody.JdbcDriver</property>
2 <property name="hibernate.connection.driver">com.mysql.jdbc.Driver</property>
3 <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/myschema</property>
4 <property name="hibernate.connection.username">myuser</property>
5 <property name="hibernate.connection.password">mypassword</property>

 注意这个地方,可能一般的hibernate.cfg.xml参数并不是像上面的配置,不要紧。

 只要保证原有的connection.driver是真是的驱动,上面添加一个参数connection.driver_class是javamelody的那个jdbc驱动即可。即参考我下面诶之oracle的hibernate数据源文件

  1 <?xml version="1.0" encoding="GBK"?>
2 <!-- 指定Hibernate配置文件的DTD信息 -->
3 <!DOCTYPE hibernate-configuration PUBLIC
4 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
5 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
6 <!-- hibernate- configuration是连接配置文件的根元素 -->
7 <hibernate-configuration>
8 <session-factory>
9
10 <!-- 看这里!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-->
11 <!-- 指定连接数据库所用的驱动 注意下面这句哦!!!!就是这句话起关键性的作用-->
12 <property name="connection.driver_class">net.bull.javamelody.JdbcDriver</property>
13
14 <property name="connection.driver">oracle.jdbc.driver.OracleDriver</property>
15 <!-- 指定连接数据库的url,hibernate连接的数据库名 -->
16 <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
17 <property name="connection.useUnicode">true</property>
18 <property name="connection.characterEncoding">gbk</property>
19 <!-- 指定连接数据库的用户名 -->
20 <property name="connection.username">test</property>
21 <!-- 指定连接数据库的密码 -->
22 <property name="connection.password">test</property>
23 <!-- C3P0连接池设定-->
24 <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
25 <!-- 指定连接池里最大连接数 -->
26 <property name="hibernate.c3p0.max_size">20</property>
27 <!-- 指定连接池里最小连接数 -->
28 <property name="hibernate.c3p0.min_size">1</property>
29 <!-- 指定连接池里连接的超时时长 -->
30 <property name="hibernate.c3p0.timeout">120</property>
31 <!-- 指定连接池里最大缓存多少个Statement对象 -->
32 <property name="hibernate.c3p0.max_statements">0</property>
33 <property name="hibernate.c3p0.idle_test_period">60</property>
34 <property name="hibernate.c3p0.acquire_increment">2</property>
35 <property name="hibernate.c3p0.validate">true</property>
36 <property name="hibernate.c3p0.preferredTestQuery ">select sysdate from dual </property>
37 <property name="hibernate.c3p0.idleConnectionTestPeriod ">120</property>
38 <property name="hibernate.c3p0.maxIdleTime">1800</property>
39 <property name="hibernate.c3p0.testConnectionOnCheckout">true</property>
40
41 <!-- 指定数据库方言 -->
42 <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
43 <!-- 根据需要自动创建数据库 -->
44 <property name="hbm2ddl.auto">update</property>
45 <!-- 显示Hibernate持久化操作所生成的SQL -->
46 <property name="show_sql">true</property>
47 <!-- 将SQL脚本进行格式化后再输出-->
48 <property name="hibernate.format_sql">true</property>
49 <!-- 罗列所有的映射文件-->
50 <mapping resource="Person.hbm.xml"/>
51
52 </session-factory>
53 </hibernate-configuration>

参考上面这样的配置,就可以了。打开监控页面,就可以看到SQL相关的参数了。


 另一种呢,就是使用spring,如果使用spring,是不需要额外设置驱动类的。

  前提是,必须在加载web.xml的时候指定加载的spring配置文件。需要在web.xml中实现一个监听,这个监听回使web应用在读取web.xml时,加载指定的spring文件。

  1 <listener>
2 <listener-class>
3 org.springframework.web.context.ContextLoaderListener
4 </listener-class>
5 </listener>

然后我们通过设置参数,设置启动的spring文件

  1 <context-param>
2 <param-name>contextConfigLocation</param-name>
3 <param-value>
4 classpath:net/bull/javamelody/monitoring-spring.xml
5 classpath:context/services.xml
6 classpath:context/data-access-layer.xml
7 /WEB-INF/applicationContext.xml
8 </param-value>
9 </context-param>

注意monitoring-spring.xml与applicaitonContext.xml的位置,我好多次使用这种方式都没有成功,貌似就是这个位置的顺序颠倒了。是否是这个原因,还有待验证(明天测试,现在没有环境)。

  整个web.xml的配置文件,参考下面

  1 <?xml version="1.0" encoding="GBK"?>
2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
3 <!-- 指定spring的配置文件 -->
4 <context-param>
5 <param-name> contextConfigLocation</param-name>
6 <param-value>
7
8 classpath:net/bull/javamelody/monitoring-spring.xml
9 classpath:bean.xml
10
11 </param-value>
12 </context-param>
13
14 <filter>
15 <filter-name>struts</filter-name>
16 <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
17
18 <init-param>
19 <param-name>struts.action.extension</param-name>
20 <param-value>action</param-value>
21 </init-param>
22 </filter>
23 <filter-mapping>
24 <filter-name>struts</filter-name>
25 <url-pattern>/*</url-pattern>
26 </filter-mapping>
27
28 <filter>
29 <filter-name>monitoring</filter-name>
30 <filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
31
32 <init-param>
33 <param-name>log</param-name>
34 <param-value>true</param-value>
35 </init-param>
36 </filter>
37 <filter-mapping>
38 <filter-name>monitoring</filter-name>
39 <url-pattern>/*</url-pattern>
40 </filter-mapping>
41 <listener>
42 <listener-class> net.bull.javamelody.SessionListener</listener-class>
43 </listener>
44
45 <!-- 下面这个用于指定监听,会使web应用去加载spring的配置文件,而不是每次等到用的时候读取-->
46 <listener>
47 <listener-class>
48 org.springframework.web.context.ContextLoaderListener
49 </listener-class>
50 </listener>
51 <welcome-file-list>
52 <welcome-file>index.jsp</welcome-file>
53 </welcome-file-list>
54 </web-app>

  另外,根据官方文档,如果你的应用与monitoring-spring.xml或者AOP之类的有冲突,那么使用monitoring-spring-datasource.xml文件替代monitoring-spring.xml就可以了,这个文件仅仅包含一个datasource的发送进程以及SpringDataSourceFactoryBean的一个例子。

javaMelody监控javaWeb程序性能的更多相关文章

  1. Elastic AMP监控.NET程序性能

    什么是Elastic AMP Elastic APM 是一个应用程序性能监控系统.它可以请求的响应时间.数据库查询.对缓存的调用.外部 HTTP 请求等的详细性能信息,可以实时监控软件服务和应用程序. ...

  2. 使用Metrics监控应用程序的性能

    在编写应用程序的时候,通常会记录日志以便事后分析,在很多情况下是产生了问题之后,再去查看日志,是一种事后的静态分析.在很多时候,我们可能需要了解整个系统在当前,或者某一时刻运行的情况,比如当前系统中对 ...

  3. timeSeries db之:使用Metrics监控应用程序的性能 (zz)

    在编写应用程序的时候,通常会记录日志以便事后分析,在很多情况下是产生了问题之后,再去查看日志,是一种事后的静态分析.在很多时候,我们可能需要了解整个系统在当前,或者某一时刻运行的情况,比如当前系统中对 ...

  4. Metrics.NET step by step使用Metrics监控应用程序的性能

    使用Metrics监控应用程序的性能 在编写应用程序的时候,通常会记录日志以便事后分析,在很多情况下是产生了问题之后,再去查看日志,是一种事后的静态分析.在很多时候,我们可能需要了解整个系统在当前,或 ...

  5. JVM-Java程序性能监控-初级篇

    前篇 - 小伙们都知道,java程序的性能监控主要是针对jvm中heap的监控~ 那么在做压力测试时如何对heap.线程等一系列的指标进行的监控的呢? 首先-你若不懂命令,那么就需要了解一套Java程 ...

  6. [原创小工具]软件内存、CPU使用率监视,应用程序性能监测器 v3.0 绿色版

    应用程序性能监测器 V3.0 更新内容:    1.对一些代码进行了修改,软件本身的性能有所提升. 应用程序性能监测器 V2.0 更新内容:     1.鼠标移动到曲线区域,显示相关的曲线值      ...

  7. Java程序性能优化——让你的java程序更快、更稳定

    1.Java性能调优概述 1.1.Web服务器,响应时间.吞吐量是两个重要的性能参数. 1.2.程序性能的几个表现: 执行速度:程序的反映是否迅速,响应时间是否足够短 内存分配:分配是否合理,是否过多 ...

  8. 在 NetBeans IDE 6.0 中分析 Java 应用程序性能

    NetBeans IDE 6.0 包含一个强大的性能分析工具,可提供与应用程序运行时行为有关的重要信息.通过 NetBeans 性能分析工具,我们可以方便地在 IDE 中监控应用程序的线程状态.CPU ...

  9. zabbix如何监控WEB应用性能

    HTTP服务目前最流行的互联网应用之一,如何监控服务的健康状态对系统运维来说至关重要.   Zabbix本身提供了对WEB应用程序的监控,比如监控WEB程序的Download Speed,Respon ...

随机推荐

  1. Microsoft JET Database Engine 错误 '80004005' 未指定错误

    Microsoft JET Database Engine 错误 '80004005'未指定错误 =====解决=======出现这种“未指定错误”时,可以尝试重新注册ASP脚本解释链接库文件在CMD ...

  2. diff目录或文件比较

    转载 2014年12月16日 19:16:54 1937 [功能] 以行的方式比较文本文件的异同处      若要比较目录,则会比较相同文件名的文件[参数]      -b        忽略空格数目 ...

  3. Tony的口胡呼呼(。-ω-)zzz

    三分 给定平面内 \(n <= 2000\) 个节点, 求平面内一点使得到所有点的欧几里得距离和最小 确定 \(y\) 轴时 \(x\) 轴满足单峰函数 \(x\) 轴同理 三分套三分即可 深度 ...

  4. 函数和常用模块【day06】:xml模块(六)

    本节内容 1.简述 2.xml格式 3.xml节点操作 4.创建新的xml文件 一.简述 xml是实现不同语言或者程序之间进行数据交换的协议,跟json差不多,但是json使用起来更简单,不过,古时候 ...

  5. EXISTS 与 NOT EXISTS 的用法及返回结果

    (1)SELECT * FROM `datatower-all`.TMP_DWD_POI t1 WHERE EXISTS ( SELECT 1 FROM `datatower-all`.DWD_POI ...

  6. Java编程思想 学习笔记8

    八.多态  在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种基本特征. 多态通过分离做什么和怎么做,从另一角度将接口和实现分离开来. “封装”通过合并特征和行为来创建新的数据类型.“实现 ...

  7. Ant基础知识1

    1.Ant简介 Apache Ant是一个将软件编译/测试/部署等步骤联系在一起加以优化的一个构建工具,常用于java环境中的软件开发.Ant的默认配置文件是build.xml. 对java语言的支持 ...

  8. 从面向对象的角度重新认识JS世界

    一. 背景  距离上一篇JS文章已经20天,经重新总结发现,上一篇概况的有点浅显,适合初学js的入门了解,但对于已经学习js一段时间的人,或者是想系统的了解JS体系,接下来的文章可能会更有帮助. 该系 ...

  9. .Net并行编程之同步机制

     一:Barrier(屏障同步) 二:spinLock(自旋锁) 信号量  一:CountdownEvent 虽然通过Task.WaitAll()方法也可以达到线程同步的目的. 但是Countdown ...

  10. Postfix 邮件服务 - 邮箱组件 cyrus-sasl

    cyrus-sasl 简单认证安全层, SASL主要是用于SMTP认证.cyrus-sasl(Simple Authentication Security Layer)简单认证安全层, SASL主要是 ...