<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)站導航:
     
    主站蜘蛛池模板: 最近中文字幕大全免费版在线| 亚洲天然素人无码专区| 免费又黄又爽又猛大片午夜 | 国产亚洲美女精品久久久2020| 国产精品无码亚洲一区二区三区| 成人毛片18女人毛片免费视频未| 亚洲精品熟女国产| 18pao国产成视频永久免费| 亚洲网站在线免费观看| 国产成人午夜精品免费视频| 亚洲国产av一区二区三区丶| 欧美好看的免费电影在线观看| 亚洲高清一区二区三区| 在线观看成人免费| 美女羞羞免费视频网站| 一本久久a久久精品亚洲| a毛片在线免费观看| 亚洲成人午夜在线| 69式国产真人免费视频| 亚洲乱码av中文一区二区| 亚洲成a人片在线观看久| 十八禁在线观看视频播放免费| 亚洲av福利无码无一区二区| 亚洲毛片免费视频| 亚洲AV无码专区在线观看成人| 国产jizzjizz免费看jizz| 高清永久免费观看| 亚洲精品视频观看| 免费二级毛片免费完整视频| 久久久受www免费人成| 亚洲高清日韩精品第一区| 日本不卡在线观看免费v| 久久国产美女免费观看精品 | 亚洲国产人成网站在线电影动漫| 精品无码免费专区毛片| 羞羞的视频在线免费观看| 亚洲va无码专区国产乱码| 成人性生免费视频| 国产无遮挡又黄又爽免费网站| 狠狠色香婷婷久久亚洲精品| 亚洲国产成人精品女人久久久 |