JavaMelody是运行在Java Web容器中,用来监控Java内存和J服务器CPU使用情况,用户Session数量,JDBC连接数,和http请求、sql请求等的执行数量,平均执行时间,错误百分比等。
图表可以按天,周,月,年或自定义时间段查看。
使用方法
下载地址
https://github.com/javamelody/javamelody/releases
Maven依赖
<dependency> <groupId>net.bull.javamelody</groupId> <artifactId>javamelody-core</artifactId> <version>1.60.0</version> </dependency>
使用方法
直接把下载的jar包放在项目中WEB-INF/lib目录下即可,无需任何配置,启动容器后监控程序就已经运行。
至于为何不需要任何配置,javamelody相关程序就自动运行了,最下面有说明。
用户界面
在浏览器地址栏,输入如下样式的url,就可以访问监控图形界面。
http://<host>/<context>/monitoring
javamelody启动原理
按照正常使用步骤,除了导入javamelody的jar包,还需要在web.xml配置文件里,配置过滤器filter和filter-mapping,还有一个listener监听器。
为什么现在只需导入jar包,不需要任何配置,启动容器监控程序也跟着启动?这个要从Servlet3.0的规范说起。
Servlet3.0
Servlet3.0对于模块化支持
也就是说现在我们可以把各Web组件单独拿出来进行开发,之后把它们打成对应的jar包放到主项目中就可以了,而不必像之前那样——所有的内容都必须在web.xml文件中进行定义。有了对模块化的支持后我们在实际应用中就可以把某些通用功能的Filter、Listener、Servlet作为一个单独的Web模块进行定义,在需要使用它们的项目中就把对应Web模块对应的jar包加进去就可以了。是不是很有用呢?接下来我们就来看一下这些Web组件究竟是怎样模块化的。
Web模块打成的jar包的内容的文件结构要求是这个样子的:
|--META-INF
| |--web-fragment.xml
| |--resources
| | |--jsp、图片等,相当于web的根目录
|--class文件和类路径下的文件
容器启动时,会去读取每个jar包的META-INF下的信息
查看javamelody-core的jar包会发现,在META-INF文件夹下有个web-fragment.xml,说明这个jar包本身就是一个Web模块
打开这个文件,会发现,其实运行监控的过滤器和监听器,已经在这个文件里定义了。这也是为什么不需要再做配置的原因
Servlet 3.0需要Tomcat 7.0以上版本才支持(包含7.0)