从JMX 谈系统监控
参考:http://www.mengxiansheng.net/index.php/archives/66
jmx介绍:
http://en.wikipedia.org/wiki/Java_Management_Extensions 写道写道
系统/应用/网站监控:
在开源的时代,只要你有足够的学习能力,完成一个系统/网站几乎不会存在技术难题,但对于系统的性能监控,重要功能性能指标的监控,数据库并发数量的监控等等问题同时也需要我们去实现。这时JMX就必须被提及了,开源架构配合JMX可以很容易的完成系统的监控功能。
更多jmx资源:
http://en.wikipedia.org/wiki/Java_Management_Extensions
http://www.oracle.com/technetwork/articles/javase/jmx-138825.html#1
体验JMX的强大之处:
童鞋们是否使用过weblogic、websphere 、oracle as这样的商用服务器,如果使用过你一定对它的管理控制台的能力印象深刻,我们可以通过他们的管理控制台去监控JVM 堆栈的使用情况,可以执行JVM 垃圾回收,可以配置数据库连接池的参数且不用重启服务就可以生效,试想它们是如何实现这样强大的功能的?
jmx,使用jmx可以很轻易的去监控系统中重要线程的运行情况,如数据缓冲池、自定义对象缓冲池的使用等等,并且可以去监控JVM虚拟机的运行情况,且可以远程调用jvm的垃圾回收。
jmx实战:
现在主流的SSH框架已经深入人心,使用spring可以让jmx变的更加容易,将jmx融入我们的系统中可以让系统更加强健,更加具有可维护性,当系统发生故障时我们可以通过jmx远程查看主要功能的运行状况,以对系统故障做出客观的判断,这对后期维护很重要,下面的案例以spring+jmx 将项目运行在jetty上 为例(因为spring对jmx做了很好的整合,可以减少很多工作)。
1.spring 配置文件
<!--通过jmx实现对城市新闻实体对象缓冲池的监控、参数调整的功能,export 是将制定的bean暴漏给jmx,使其可以通过远程jconsole可以进行控制--> <bean id="exporter" class="org.springframework.jmx.export.MBeanExporter" lazy-init="false"> <property name="beans"> <map> <entry key="bean:name=cityNewsPoolMbean" value-ref="cityNewsPoolMbean" /> </map> </property> </bean> <!--可以让jconsole进行远程查看参数,修改参数bean对象,JikePoolMbean 是一个普通事java bean,里面是get**、set**方法--> <bean id="cityNewsPoolMbean" class="com.jike.mobile.JikePoolMbean"> <constructor-arg index="0" type="org.apache.commons.pool.impl.GenericObjectPool" ref="cityNewsClientObjectPool"/> </bean>
2.简单的测试项目完成后,将项目部署到jetty,启动jetty
到 JETTY_HOME 目录下,运行下面命令(在ubuntu下,上jetty后台运行):
3.使用本机jconsole监控JVM,调整系统参数配置