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