最近做多个远程服务器的系统监控,花费了不少的时间,下面就做一个总结
从JAVA 5开始,JDK提供了一些JVM检测的API,这就是有名的java.lang.management 包,包里提供了许多MXBean的接口类,可以很方便的获取到JVM的内存、GC、线程、锁、class、甚至操作系统层面的各种信息,本文就简单的介绍一种利用JMX对JAVA进程进行CPU、堆内存使用的监控。可能有人会觉得没必要这样做,因为用jconsole之类的工具都能做到,而且会比本文的例子更详细。但是有些时候将console不一定能监控到作为系统服务的java进程,我最近就不得不自己编码去获取远程java进程的监控数据。希望能起到抛砖引玉的作用吧。
第一步:向被监控的服务器Tomcat中添加一段配置代码
详情:http://tomcat.apache.org/tomcat-6.0-doc/monitoring.html#Enabling_JMX_Remote
打开Tomcat的bin文件夹下的catalina.bat文件(用文件编辑软件打开)
添加如下代码:
set CATALINA_OPTS=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8787 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
2 启动tomcat服务,调用jconsole监视器查看里面的MBean
在CMD中输入 : jconsole
在远程哪儿输入:
service:jmx:rmi:///jndi/rmi://192.168.85.54:8787/jmxrmi (替换服务器tomcat所在的ip)
可以显示如下图:包括CPU占用率,堆信息,非堆信息,类加载,内存使用情况等,如下图
点开右边的MBean,我们可以获取其对应MBean的ObjectName,然后通过属性和做操的Key值获取想要的数据,如下图