使用Java构建的大规模分布式架构网站。为了了解整个网站中的每个节点运行状况,在考虑性能、开发速度而不考虑多开发语言支持的情况下,JMX无疑是最适合的方式。
JMX(Java 管理扩展,Java Management Extensions)是Sun公司在J2SE 5中提出来的。JMX可以访问到java应用的信息,也可以访问到JVM的信息。一个最简单的方式,单独设立一个监控节点,轮训访问整个网站所有节点的信息,发现任何一台有问题,给运维人员发邮件或者短信报警。
对于Java开发工程师而言,开发量真心不大。简单例子(标准MBean,这里不讨论MXBean,Dynamic,Model和Open这些MBean)如下:
对于需要监控的数据类,创建其父接口,名字为类名+MBean。假设有一个管理类ConfigureManager,则让它的父接口为ConfigureManagerMBean
在main函数中,添加如下语句:
try { mBeanServer = ManagementFactory.getPlatformMBeanServer(); objectName = new ObjectName("net.sourceforge.ppcool:id=ConfigureManager"); mBeanServer.registerMBean(ConfigureManager.Instance(), objectName); } catch (Exception e) { logger.error(e.getMessage(), e); }
运行此程序时,需要在java执行启动命令中添加以下红色部分
nohup java -agentpath:/app/jprofiler8/bin/linux-x86/libjprofilerti.so=port=8849 -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=外网IP地址 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=提供服务的端口号 -Dcom.sun.management.jmxremote.ssl=false -jar ppgateway.jar /app/javagateway/gateway.conf &
分别说明一下:
-Dcom.sun.management.jmxremote 提供本地JMX查询服务
-Djava.rmi.server.hostname=外网IP地址 提供远程JMX查询服务,需要IP地址
-Dcom.sun.management.jmxremote.authenticate=false 无需做密码认证
-Dcom.sun.management.jmxremote.port=提供服务的端口号 提供远程JMX查询服务,需要端口号
-Dcom.sun.management.jmxremote.ssl=false 不使用SSL
具体其他信息,你可以参考:http://docs.oracle.com/javase/1.5.0/docs/guide/management/
对于节点的Java开发工程师,无需和监控点的开发工程师对接调试。只需要使用JConsole(在JDK的bin目录下)即可。