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. kubernetes Dashboard 使用RBAC 权限认证控制

    kubernetes RBAC实战 环境准备 先用kubeadm安装好kubernetes集群,[包地址在此](https://market.aliyun.com/products/56014009/ ...

  2. 关于TCP连接状态的解释

    TCP各个状态主要存在于三次握手和四次挥手的过程 1.TCP建立连接时的三次握手: 服务端应用监听端口处于LISTEN状态,等待建立连接. 第一次握手:客户端发送SYN=一个随机数,然后进入SYN_S ...

  3. zabbix3.x添加H3C网络设备详解

    zabbix3.x添加H3C网络设备详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 前言: 欢迎加入:高级运维工程师之路 598432640 相信大家在看我的文章之前,也看过其 ...

  4. 5、JDBC-元信息

    DatabaseMetaData:描述数据库的元数据对象 获取所有数据库 import org.junit.jupiter.api.AfterEach; import org.junit.jupite ...

  5. jquery 遍历 json【转】

    jquery 遍历 json <HTML> <HEAD> <meta http-equiv="content-Type" content=" ...

  6. 使用MedleyText与Syncthink自建云笔记

    随着学习加深,做的笔记越来越多,而使用云笔记怕万一平台关闭(如360网盘啥的)还需要导出笔记费时费力,并且多平台兼容性未知.还是自己搭建放心省事. MedleyText介绍 MedleyText为ma ...

  7. POJ - 2031 Building a Space Station(计算几何+最小生成树)

    http://poj.org/problem?id=2031 题意 给出三维坐标系下的n个球体,求把它们联通的最小代价. 分析 最小生成树加上一点计算几何.建图,若两球体原本有接触,则边权为0:否则边 ...

  8. python 代码模板

    命令[python3 -m pydoc -p 1234]   通过http://localhost:1234来访问查看文档 # -*- coding: utf-8 -*-""&qu ...

  9. JAVA 动态代理学习记录

    打算用JAVA实现一个简单的RPC框架,看完RPC参考代码之后,感觉RPC的实现主要用到了两个方面的JAVA知识:网络通信和动态代理.因此,先补补动态代理的知识.---多看看代码中写的注释 参考:Ja ...

  10. node.js 笔记

    教程总结笔记: 学习网站:http://www.runoob.com/nodejs/nodejs-install-setup.html Node.js 中文网及安装文件下载: http://nodej ...