java 监控之JMX规范1
1.??JMX規(guī)范
JMX是“Java管理擴(kuò)展的”的縮寫,它和其他JavaEE類似也是曾經(jīng)的Sun提出的一種規(guī)范(規(guī)約),從名字上可以看出主要是負(fù)責(zé)系統(tǒng)管理。是一個(gè)為系統(tǒng)加入或者說擴(kuò)展成有管理功能的規(guī)約,只要按照這套規(guī)約行事,您的系統(tǒng),某些某塊就具備被其他工具(例如JConsole)管理的能力。換句話說就是可以用JMX來監(jiān)控咱們的系統(tǒng)運(yùn)行情況,還有可以在運(yùn)行時(shí)環(huán)境像Web Service、RMI一樣調(diào)用系統(tǒng)管理類的一些方法。實(shí)現(xiàn)此規(guī)范的框架也很多:Spring、Tomcat、JBoss容器……,他們實(shí)現(xiàn)了好多可以被jsoncole 工具監(jiān)控的方法
2.??場(chǎng)景簡(jiǎn)述
咱們先假設(shè)一個(gè)情景,夫妻二人。男的因?yàn)楣ぷ餍枰ネ獾爻霾?#xff0c;因公司規(guī)定,出差不能帶家屬,女方不能跟過去啊。所以女方給他們2個(gè)人一個(gè)手機(jī)——HTC吧。里面有個(gè)小程序,叫做JMXImpl4Android。等到男方出差在外地了,在外地出差的城市,一天晚上和同事散步,路上遇到個(gè)發(fā)廊(各位男性朋友明白的啊)。此時(shí)遠(yuǎn)在另一個(gè)城市的妻子的手機(jī)突然響了,手機(jī)GIS定位信息告知妻子:“您的丈夫在一個(gè)發(fā)廊門前徘徊,請(qǐng)注意”。妻子急了,立刻給丈夫打電話:“你干嘛呢?”。丈夫戰(zhàn)戰(zhàn)栗栗,汗出如漿,乖乖的回酒店玩DOTA了!
我們來用Java消息擴(kuò)展的視角來看看這個(gè)場(chǎng)景,咱們偉大一些相當(dāng)于那個(gè)妻子,那個(gè)丈夫就相當(dāng)于咱們的系統(tǒng),出差事件相當(dāng)于咱們將系統(tǒng)部署到了真正的遠(yuǎn)程的運(yùn)行環(huán)境,妻子曾HTC手機(jī)給丈夫您可以理解成把丈夫打造成具有JMX規(guī)范的系統(tǒng),換句話說:此丈夫可監(jiān)控。因?yàn)橐粋€(gè)小小的GIS應(yīng)用就能讓妻子隨時(shí)監(jiān)控丈夫的狀態(tài)——想邪惡一把,并且還可以根據(jù)系統(tǒng)的狀態(tài)進(jìn)行相應(yīng)的措施——打電話告訴丫的別想出軌,雖然新的婚姻法下來了,但是房子是老娘買的,出軌?你試試!
看到這里,大家估計(jì)明白了JMX是什么東西,干什么用的了。但是估計(jì)大家有一個(gè)疑問,這個(gè)和Java分布式系統(tǒng)有什么關(guān)系啊?在分布式系統(tǒng)中有時(shí)候我們需要監(jiān)控各個(gè)分機(jī)器的狀態(tài),比如想知道機(jī)器此時(shí)此刻的Tomcat的運(yùn)行狀況如何,還可以根據(jù)狀況調(diào)用相關(guān)的操作,比如shutdown服務(wù)、去除已部署的web工程等等與服務(wù)有關(guān)的操作。或者對(duì)于調(diào)度這些節(jié)點(diǎn)機(jī)的主控機(jī)器也可以進(jìn)行監(jiān)控,在遠(yuǎn)程使用一個(gè)JConsole調(diào)用即可。Ok,說了這么多,我們看示例吧,最后再來用實(shí)例解釋JMX的那些晦澀的理論概念。
3.??監(jiān)控本機(jī)程序
這種場(chǎng)景在實(shí)際中不太常用,對(duì)于本機(jī)的程序來說,需要監(jiān)控,按需調(diào)用被托管的類方法還真不多。
相當(dāng)于丈夫就在你面前,他的一舉一動(dòng)都在你眼皮底下,你還需要一個(gè)Android小程序去監(jiān)控他嗎?筆者使用的是Spring3的實(shí)現(xiàn)。所以先將Spring的包下載下來,放到項(xiàng)目的classpath中。
咱們先寫一個(gè)最普通的JavaBean
package?jmx;??
?
?org.springframework.jmx.export.MBeanExporter是Spring暴露管理Bean(MBean)的核心類之一。它使用一個(gè)Map類型的屬性——beans記錄要暴露MBean的類。將咱們剛剛寫的HusbandLocal以屬性注入的方式注入進(jìn)去。之后寫一個(gè)加載Spring文件的main實(shí)例,開啟服務(wù)。
Java代碼??
?
?點(diǎn)擊進(jìn)去后可以查看咱們剛才暴露的MBean,如下
?
?我們可以點(diǎn)擊MBean的操作,比如playDOTA(),后臺(tái)就調(diào)用了該方法。在這個(gè)界面還可以看到MBean的屬性值,你叫他們狀態(tài)也行。
如此,我們完成了一個(gè)本地監(jiān)控MBean對(duì)象的小功能。不過就像原來說的,這有個(gè)問題就是咱們之前說的,這種本地場(chǎng)景不多見,不常用。Ok,咱們看看要想遠(yuǎn)程監(jiān)控需要做些什么事情。
4.??監(jiān)控遠(yuǎn)程程序
下面我們嘗試在遠(yuǎn)程監(jiān)控咱們這個(gè)“丈夫”。
首先在Spring配置文件增加以下內(nèi)容
Java代碼??
?剛才我們將我們的MBean注冊(cè)到一個(gè)基于RMI訪問方式的連接服務(wù)上(ConnectorServerFactoryBean),占用的端口是8080。這時(shí)啟用jconsole以遠(yuǎn)程方式連接,不用輸入密碼,如下圖所示
?
之后和在本地操作一樣,可以監(jiān)控MBean的屬性狀態(tài),也可以進(jìn)行相應(yīng)的操作。
5.??監(jiān)控Web容器
如果我們要監(jiān)控一下Web服務(wù)器,比如Tomcat服務(wù)器的JVM狀態(tài)怎么辦?這種場(chǎng)景非常的常見。其實(shí)配置也很簡(jiǎn)單。我們打開{Tomcat_HOME}/bin/catalina.bat,在linux下是{Tomcat_HOME}/bin/catalina.sh文件。將原有的腳本
Java代碼??
?替換成為
Java代碼??
?
我們運(yùn)行startup.bat文件,之后開啟JConsole,遠(yuǎn)程登錄tomcat
?之后即可查看遠(yuǎn)程Tomcat資源
?
?
?
而Tomcat自身這個(gè)容易也有很多模塊支持JMX規(guī)范,可以通過JConsole進(jìn)行一些MBean的管理
?
6.??監(jiān)控JavaEE容器
?
說完Tomcat這種Web容器,不得不說說JavaEE容器,就將開源的JBoss拉出來看看,其實(shí)JBoss自身因?yàn)槭且粋€(gè)JavaEE容器,而JMX是屬于JavaEE5范疇內(nèi)的規(guī)范,所以JBoss自身就擁有很多JMX的特性,比如咱們動(dòng)態(tài)添加一個(gè)DataSource資源時(shí)候,后臺(tái)的JBoss控制臺(tái)console的界面就會(huì)自動(dòng)更新運(yùn)行時(shí)的狀態(tài),數(shù)據(jù)源的連接狀態(tài)也能一覽無余的顯示給后臺(tái)使用者。這些實(shí)際上都是JMX的特性。只不過結(jié)合了Web頁面的UI罷了。其實(shí)基于Web頁面,大家就能看到JBoss自身的運(yùn)行狀況了
?如果需要JConsole連上遠(yuǎn)端的JBoss,和Tomcat一樣,需改一下配置文件run.bat,linux的就不贅述了,將以下代碼段
Java代碼??
?
替換成
Java代碼??
之后啟動(dòng)JConsole即可遠(yuǎn)程連接JBoss,地址:192.168.1.100:9999
?
?
可以看出Tomcat與JBoss的消耗資源真的不是一個(gè)數(shù)量級(jí)的。
7.??總結(jié)
這次是介紹了JMX的使用場(chǎng)景和一些分布式系統(tǒng)中常用的配置和監(jiān)控情形,對(duì)于JMX規(guī)范本身,尤其是重要的MBean并沒有做過多的介紹,其實(shí)MBean有很多種情況,這一篇文章并不能盡述。知道他是干什么,遇到那些晦澀難懂的理論就不再懼怕了,有時(shí)間打算下次再詳細(xì)說說JMX MBean的各種使用情況。
總結(jié)
以上是生活随笔為你收集整理的java 监控之JMX规范1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分布式系统工程实践
- 下一篇: uniapp视频试看功能