JMX 早期是做为J2EE的一部分, 所以总给人一种开发起来会很"重"的感受, 这让很多Java程序员宁愿选择自行实现"轻量级"方案. 时至今日, 借助一些优秀的开源项目, JMX 也能够用起来很"轻".javascript
pojo-mbean 使用Annotation对MBean进行声明, 省去很多 JMX规范中要求的罗嗦代码, 不知道有多罗嗦的请见 这里 . 例如, ManagableServer 但愿被声明为一个MBean, 只有两个步骤:html
@MBean(objectName="jsmx:type=Demo") class ManagableServer { @ManagedAttribute public long getCount() {...} @ManagedAttribute public int getGauge() {...} @ManagedOperation public void shutdown() {...} }
ManagableServer mBean = new ManagableServer(); new MBeanRegistration(mBean).register();
运行以后, 你能够经过 jconsole 查看到已经发布的MBean.java
若是 jconsole 就能够知足你对监控的要求, 那么下文的内容大可没必要再看啦.git
jconsole 做为JDK自带的们免费工做仍是很强大的, 它提供JVM最基本的监控能力, 然而默认的RMI通信方式可能会因为安全缘由而被限制使用.
jolokia 实现了经过HTTP+JSON的方式访问MBean, 很好的解决这个问题. 无需额外编写代码即可使用, 只须要在启动命令中指定 -javaagent 选项便可实现:程序员
java -javaagent:/path/to/jolokia-jvm-jdk6-x.xx-agent.jar=port=7777,host=localhost -cp ...
再使用 jolokia 提供的 javascript API 即可打造一个超轻量的 web console, 如图:github
开发一个真正知足应用的 web console 确定不是5分钟可以搞定的, 专业的监控平台仍是有不少可供使用的, Ganglia 即是其中之一.
如题所述, jmxetric 就提供方便与 Ganglia 集成解决方案, 一样无需额外编写代码, 实现的两个步骤是:web
<jmxetric-config> <jvm process="JSMX" /> <sample delay="10"> <mbean name="jsmx:type=Demo" pname="Demo"> <attribute name="count" type="int32" pname="Count" /> <attribute name="gauge" type="int32" pname="Gauge" /> </mbean> </sample> <ganglia hostname="localhost" port="8649" mode="multicast" wireformat31x="true" /> </jmxetric-config>
java -javaagent:/path/to/jmxetric-0.0.x.jar=config=etc/jmxetric.xml,wireformat31x=true -cp ...
在 jmxetric -0.0.6中, 若要设置wireformat31x为true只有在 javaagent option中设置才能生效, 详情请见 issue25 .api
在 Ganglia 中的效果是:安全
细节是魔鬼! "5分钟"虽有点标题党, 但丰富的开源资源确实令JMX使用变的超级容易啦.完整的Demo在 这里 . 期待更多更好更有创意的作法!oracle