<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 12, 文章 - 0, 評論 - 22, 引用 - 0
    數(shù)據(jù)加載中……

    JMX分析2-Monitor

          JMX Monitor主要用于監(jiān)控MBeanServer注冊的MBeans屬性值得變化,在屬性的值達到閾值的時候發(fā)送消息。JMX agent需要實現(xiàn)Monitor功能。
    下面看一下例子:
    代碼1:標準MBean接口
    1 package test.jmx.monitor;
    2 
    3 public interface CountMBean {
    4     public int getCount();
    5 }

    代碼2:標準MBean的實現(xiàn)類
     1 package test.jmx.monitor;
     2 
     3 public class Count implements CountMBean{
     4     int count = 0;
     5     
     6     Count(int count){
     7         this.count = count;
     8     }
     9     
    10     @Override
    11     public int getCount() {
    12         return count;
    13     }
    14 
    15     public void addNumber(){
    16         count = count + 3;
    17     }
    18 }
    19 

    代碼3:測試類
     1 package test.jmx.monitor;
     2 
     3 import javax.management.MBeanServer;
     4 import javax.management.MBeanServerFactory;
     5 import javax.management.MalformedObjectNameException;
     6 import javax.management.Notification;
     7 import javax.management.NotificationListener;
     8 import javax.management.ObjectName;
     9 import javax.management.monitor.CounterMonitor;
    10 import javax.management.monitor.Monitor;
    11 import javax.management.monitor.MonitorNotification;
    12 
    13 import org.junit.Test;
    14 
    15 public class MonitorTest {
    16     
    17     @Test
    18     public void test1CountMonitor() throws Exception{
    19         MBeanServer ms = MBeanServerFactory.createMBeanServer();
    20         
    21         final Count count = new Count(0);
    22         final ObjectName nameCount = new ObjectName("Count:type=StandardMBean");
    23         ms.registerMBean(count, nameCount);
    24         
    25         //這個監(jiān)聽器類主要用于監(jiān)聽一個對象的屬性(數(shù)值類型)
    26         CounterMonitor cMonitor = new CounterMonitor();
    27         //被監(jiān)聽的對象
    28         cMonitor.addObservedObject(nameCount);
    29         //被監(jiān)聽者的屬性
    30         cMonitor.setObservedAttribute("Count");
    31         //閾值為3,超過的話,觸發(fā)事件
    32         cMonitor.setInitThreshold(4);
    33         //間隔時間
    34         cMonitor.setGranularityPeriod(1000);
    35         //接受監(jiān)控的事件
    36         cMonitor.setNotify(true);
    37         //監(jiān)控期間沒發(fā)現(xiàn)超過一次閾值,那么閾值偏移值往上加 threshold = threshold+offset;
    38         cMonitor.setOffset(4);
    39         //注冊一個Lister,用來監(jiān)聽Monitor所產(chǎn)生的消息(事件)
    40         cMonitor.addNotificationListener(new NotificationListener() {
    41             @Override
    42             public void handleNotification(Notification notification, Object handback) {
    43                 MonitorNotification n = (MonitorNotification)notification;
    44                 CounterMonitor monitor = (CounterMonitor)n.getSource();
    45                 if(MonitorNotification.THRESHOLD_VALUE_EXCEEDED.equals(n.getType())){
    46                     System.out.println("Count類-"+monitor.getObservedAttribute()+"屬性:"+n.getDerivedGauge()
    47                             +">=了設定的閾值:"+n.getTrigger()+";下個閾值:"+monitor.getThreshold(nameCount));
    48                 }else{
    49                     System.out.println(n.getType()+"--"+n);
    50                 }
    51             }
    52         },null,null);
    53         
    54         //Monitor本身就是一個標準MBean,而且Monitor也必須被注冊到MBeanServer中
    55         ObjectName nameMonitor = new ObjectName("CountMonitor:type=Monitor");
    56         ms.registerMBean(cMonitor, nameMonitor);
    57         //開始監(jiān)控
    58         cMonitor.start();
    59         
    60         for(int i=0;i<5;i++){
    61             count.addNumber();
    62             Thread.sleep(2000);
    63         }
    64         Thread.sleep(5000);;
    65     }
    66     
    67 }
    68 

          對MBean進行監(jiān)控,基本有以下幾個步驟
    1 注冊被監(jiān)控的MBean
    2 實例化一個Monitor,如monitor。
    3 monitor里添加被監(jiān)控類,即關聯(lián)起監(jiān)控類和被監(jiān)控類(調用monitor.addObservedObject(MBean))。
    4 monitor設置相關屬性,如監(jiān)控間隔時間(setGranularityPeriod(...))、監(jiān)控的屬性(即被監(jiān)控MBean的一個屬性,setObservedAttribute(...),比如例子中的屬性"Count",監(jiān)控會取得這個值,跟其他屬性對比,達到了閾值,則觸發(fā)事件),其他Monitor實現(xiàn)類的相關屬性。
    5 啟動監(jiān)控(m.start())。

    圖:MonitorMBean的層次圖

    看下Monitor中主要類:
    MonitorMBean 
    定義了一個JMX監(jiān)控的開始、結束、加入監(jiān)控的MBean、設置監(jiān)控的間隔等
    圖:MonitorMBean接口


    Monitor、CountMonitor、GaugeMonitor、StringMonitor
    MonitorMBean的層次圖中看出,Monitor實現(xiàn)了MonitorMBean,Monitor作為一個抽象類,實現(xiàn)了大部分功能,包括監(jiān)控的啟動、結束、任務調度,監(jiān)控的邏輯等。而XXXMonitor作為子類,實現(xiàn)Monitor中的特定方法,即采用了模板方法模式。


    參考:
    http://docs.oracle.com/javase/7/docs/technotes/guides/jmx/JMX_1_4_specification.pdf (JMX規(guī)范說明)

    posted on 2012-10-17 00:04 heavensay 閱讀(939) 評論(0)  編輯  收藏 所屬分類: JMX


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 91av免费在线视频| 香蕉免费一级视频在线观看| 国产精品免费播放| 亚洲成人午夜电影| 国产精彩免费视频| 亚洲国产成人久久三区| 国产四虎免费精品视频| 亚洲不卡1卡2卡三卡2021麻豆| 亚欧人成精品免费观看| 久久狠狠爱亚洲综合影院| 午夜免费福利网站| 国产精品亚洲天堂| 国产亚洲欧洲Aⅴ综合一区| jizz免费在线影视观看网站| 亚洲精品高清无码视频| 美女内射无套日韩免费播放| 亚洲美女免费视频| 毛片免费在线视频| 成人午夜免费视频| 亚洲va久久久噜噜噜久久天堂| 99久久99久久精品免费观看| 国产精品亚洲片夜色在线| 成人毛片免费观看视频在线| 黄页网站在线视频免费| 国产亚洲精品美女久久久| 国产一卡二卡四卡免费| 视频一区二区三区免费观看| 亚洲精品无码鲁网中文电影| 91精品国产免费| 亚洲国产精品99久久久久久| 亚洲夜夜欢A∨一区二区三区 | 中国在线观看免费国语版| 亚洲国产区男人本色| 亚洲日本在线观看视频| 亚洲国产欧美国产综合一区| 亚洲AⅤ视频一区二区三区| 久久久国产精品福利免费| 亚洲熟妇AV日韩熟妇在线| 亚洲伊人久久大香线蕉综合图片| 91久久精品国产免费直播| 黄色一级视频免费|