zoukankan      html  css  js  c++  java
  • WebLogic MBean Monitor

    weblogic server提供了一个dashboard让我们对mbean进行图形化的展现和分析,地址是

    http://localhost:7001/console/dashboard

     

    但有时候总是觉得weblogic的监控做出来效果不好,所以找时间自己基于JfreeChart做了一个,代码如下:

    图表类

    RealTimeChart.java

    package mbeanmonitor;

    import java.io.IOException;

    import java.net.MalformedURLException;

    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.axis.ValueAxis;
    import org.jfree.chart.plot.XYPlot;
    import org.jfree.data.time.Millisecond;
    import org.jfree.data.time.TimeSeries;
    import org.jfree.data.time.TimeSeriesCollection;

    public class RealTimeChart extends ChartPanel implements Runnable
    {
    private static TimeSeries timeSeries;
    private static TimeSeries timeSeries1;
    private long value=0;

    public RealTimeChart(String chartContent,String title,String yaxisName)
    {
    super(createChart(chartContent,title,yaxisName));
    }

    private static JFreeChart createChart(String chartContent,String title,String yaxisName){
    //创建时序图对象
    timeSeries = new TimeSeries("HeapUsedPercent",Millisecond.class);
    timeSeries1 = new TimeSeries("HeapFreePercent",Millisecond.class);

    TimeSeriesCollection timeseriescollection = new TimeSeriesCollection(timeSeries);
    timeseriescollection.addSeries(timeSeries1);
    JFreeChart jfreechart = ChartFactory.createTimeSeriesChart(title,"Time(Seconds)",yaxisName,timeseriescollection,true,true,false);
    XYPlot xyplot = jfreechart.getXYPlot();
    //纵坐标设定
    ValueAxis valueaxis = xyplot.getDomainAxis();
    //自动设置数据轴数据范围
    valueaxis.setAutoRange(true);
    //数据轴固定数据范围 30s
    valueaxis.setFixedAutoRange(300000D);

    valueaxis = xyplot.getRangeAxis();
    valueaxis.setRange(0.0D,100D);

    return jfreechart;
    }

    public void run()
    {
    while(true)
    {
    try
    {
    timeSeries.add(new Millisecond(), getWebLogicUsedHeap());
    timeSeries1.add(new Millisecond(), getJvmTotalHeap());

    Thread.sleep(3000);
    }
    catch (InterruptedException e) { }
    }
    }

    private long randomNum()
    {
    System.out.println((Math.random()*20+80));
    return (long)(Math.random()*20+80);
    }

    private int getWebLogicTotalThread() {
    String hostname = "localhost";
    String portString = "7001";
    String username = "weblogic";
    String password = "weblogic12";

    int totalthread =0;
    WebLogicServerRuntime s = new WebLogicServerRuntime();
    try {
    s.initConnection(hostname, portString, username, password);
    totalthread=s.printTotalThread();
    //connector.close();
    } catch (Exception e) {
    }

    return totalthread;
    }

    private int getWebLogicUsedHeap() {
    String hostname = "localhost";
    String portString = "7001";
    String username = "weblogic";
    String password = "weblogic12";

    int heapused =0;
    WebLogicServerRuntime s = new WebLogicServerRuntime();
    try {
    s.initConnection(hostname, portString, username, password);
    heapused=s.getJvmRuntime();
    //connector.close();
    } catch (Exception e) {
    }

    return heapused;
    }

    private int getJvmTotalHeap() {
    String hostname = "localhost";
    String portString = "7001";
    String username = "weblogic";
    String password = "weblogic12";

    int heapused =0;
    WebLogicServerRuntime s = new WebLogicServerRuntime();
    try {
    s.initConnection(hostname, portString, username, password);
    heapused=s.getJvmTotalHeap();
    //connector.close();
    } catch (Exception e) {
    }

    return heapused;
    }


    }

    //Test.java

    WebLogic Mbean类

    WebLogicServerRuntime.java

    package mbeanmonitor;

    import java.io.IOException;
    import java.net.MalformedURLException;
    import java.util.Hashtable;
    import javax.management.MBeanServerConnection;
    import javax.management.MalformedObjectNameException;
    import javax.management.ObjectName;
    import javax.management.remote.JMXConnector;
    import javax.management.remote.JMXConnectorFactory;
    import javax.management.remote.JMXServiceURL;
    import javax.naming.Context;

    public class WebLogicServerRuntime {

    private static MBeanServerConnection connection;
    private static JMXConnector connector;
    private static final ObjectName service,ThreadPoolRuntimeservice;

    // Initializing the object name for DomainRuntimeServiceMBean
    // so it can be used throughout the class.
    static {
    try {
    service = new ObjectName("com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean");
    ThreadPoolRuntimeservice = new ObjectName("com.bea:Name=ThreadPoolRuntime,ServerRunTime=AdminServer,Type=weblogic.management.mbeanservers.runtime.ThreadPoolRuntimeMBean");

    }catch (MalformedObjectNameException e) {
    throw new AssertionError(e.getMessage());
    }
    }

    /*
    * Initialize connection to the Domain Runtime MBean Server
    */
    public static void initConnection(String hostname, String portString,
    String username, String password) throws IOException,
    MalformedURLException {
    String protocol = "t3";
    Integer portInteger = Integer.valueOf(portString);
    int port = portInteger.intValue();
    String jndiroot = "/jndi/";
    String mserver = "weblogic.management.mbeanservers.domainruntime";
    JMXServiceURL serviceURL = new JMXServiceURL(protocol, hostname,
    port, jndiroot + mserver);
    Hashtable h = new Hashtable();
    h.put(Context.SECURITY_PRINCIPAL, username);
    h.put(Context.SECURITY_CREDENTIALS, password);
    h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES,
    "weblogic.management.remote");
    connector = JMXConnectorFactory.connect(serviceURL, h);
    connection = connector.getMBeanServerConnection();
    }

    /*
    * Print an array of ServerRuntimeMBeans.
    * This MBean is the root of the runtime MBean hierarchy, and
    * each server in the domain hosts its own instance.
    */
    public static ObjectName[] getServerRuntimes() throws Exception {
    return (ObjectName[]) connection.getAttribute(service,
    "ServerRuntimes");
    }

    public static ObjectName[] getTotalThread() throws Exception {
    return (ObjectName[]) connection.getAttribute(ThreadPoolRuntimeservice,
    "ExecuteThreadTotalCount");
    }

    public int printTotalThread() throws Exception {

    ObjectName[] runtimeService = getServerRuntimes();
    //new ObjectName("com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean");
    // String managedServerName = (String) connection.getAttribute(runtimeService, "Name");
    // ObjectName serverRT = new ObjectName("com.bea:Name=" + managedServerName + ",Type=ServerRuntime");
    // System.out.println("serverRT=" + managedServerName);
    // ObjectName serverTP = (ObjectName)connection.getAttribute(serverRT, "ThreadPoolRuntime");
    // String totalthread = (String) connection.getAttribute(serverTP, "ExecuteThreadTotalCount");
    // System.out.println(totalthread);

    // return Integer.parseInt(totalthread);
    int ExecuteThreadTotalCount = 0;

    int length = (int) runtimeService.length;
    for (int i = 0; i < length; i++) {
    String name = (String) connection.getAttribute(runtimeService[i],"Name");
    ObjectName threadRT = (ObjectName) connection.getAttribute(runtimeService[i],"ThreadPoolRuntime");
    ExecuteThreadTotalCount = (Integer)connection.getAttribute(threadRT, "ExecuteThreadTotalCount");
    System.out.println("n……………….<"+name+" :.. ThreadPoolRuntime>…………….");
    System.out.println("CompletedRequestCount : " + connection.getAttribute(threadRT, "CompletedRequestCount"));
    System.out.println("ExecuteThreadTotalCount : " + connection.getAttribute(threadRT, "ExecuteThreadTotalCount"));
    /* System.out.println("ExecuteThreadIdleCount : ” + connection.getAttribute(threadRT, “ExecuteThreadIdleCount”));
    System.out.println("HealthState : ” + connection.getAttribute(threadRT, “HealthState”));
    System.out.println("HoggingThreadCount : ” + connection.getAttribute(threadRT, “HoggingThreadCount”));
    System.out.println("PendingUserRequestCount : ” + connection.getAttribute(threadRT, “PendingUserRequestCount”));
    System.out.println("QueueLength : ” + connection.getAttribute(threadRT, “QueueLength”));
    System.out.println("SharedCapacityForWorkManagers: ” + connection.getAttribute(threadRT, “SharedCapacityForWorkManagers”));
    System.out.println("StandbyThreadCount : ” + connection.getAttribute(threadRT, “StandbyThreadCount”));
    System.out.println("Suspended : ” + connection.getAttribute(threadRT, “Suspended”));
    System.out.println("Throughput : ” + connection.getAttribute(threadRT, “Throughput”));
    */
    System.out.println("………………………………………………………………n");
    }
    return (ExecuteThreadTotalCount);

    }


    public int getJvmRuntime() throws Exception {
    ObjectName[] serverRT = getServerRuntimes();
    int length = (int) serverRT.length;

    int heapused = 0;
    for (int i = 0; i < length; i++) {
    String name = (String) connection.getAttribute(serverRT[i],"Name");
    ObjectName jvmRT = (ObjectName) connection.getAttribute(serverRT[i],"JVMRuntime");
    heapused = 100-(Integer)connection.getAttribute(jvmRT, "HeapFreePercent");

    System.out.println("n……………..<"+name+" : .JVMRuntime>…………….");
    System.out.println("HeapFreeCurrent :" + connection.getAttribute(jvmRT, "HeapFreeCurrent"));
    System.out.println("HeapFreePercent :" + connection.getAttribute(jvmRT, "HeapFreePercent"));
    System.out.println("HeapSizeCurrent :" + connection.getAttribute(jvmRT, "HeapSizeCurrent"));
    System.out.println("HeapSizeMax :" + connection.getAttribute(jvmRT, "HeapSizeMax"));
    System.out.println("JavaVendor :" + connection.getAttribute(jvmRT, "JavaVendor"));
    System.out.println("JavaVersion :" + connection.getAttribute(jvmRT, "JavaVersion"));
    System.out.println("Uptime :" + connection.getAttribute(jvmRT, "Uptime"));
    System.out.println("………………………………………………………………n");
    }
    return heapused;
    }

    public int getJvmTotalHeap() throws Exception {
    ObjectName[] serverRT = getServerRuntimes();
    int length = (int) serverRT.length;

    int HeapFreePercent = 0;
    for (int i = 0; i < length; i++) {
    String name = (String) connection.getAttribute(serverRT[i],"Name");
    ObjectName jvmRT = (ObjectName) connection.getAttribute(serverRT[i],"JVMRuntime");
    HeapFreePercent = (Integer)connection.getAttribute(jvmRT, "HeapFreePercent");

    System.out.println("n……………..<"+name+" : .JVMRuntime>…………….");
    System.out.println("HeapFreeCurrent :" + connection.getAttribute(jvmRT, "HeapFreeCurrent"));
    System.out.println("HeapFreePercent :" + connection.getAttribute(jvmRT, "HeapFreePercent"));
    System.out.println("HeapSizeCurrent :" + connection.getAttribute(jvmRT, "HeapSizeCurrent"));
    System.out.println("HeapSizeMax :" + connection.getAttribute(jvmRT, "HeapSizeMax"));
    System.out.println("JavaVendor :" + connection.getAttribute(jvmRT, "JavaVendor"));
    System.out.println("JavaVersion :" + connection.getAttribute(jvmRT, "JavaVersion"));
    System.out.println("Uptime :" + connection.getAttribute(jvmRT, "Uptime"));
    System.out.println("………………………………………………………………n");
    }
    return HeapFreePercent;
    }
    /*
    *
    * Iterate through ServerRuntimeMBeans and get the name and state
    */
    public void printNameAndState() throws Exception {
    ObjectName[] serverRT = getServerRuntimes();
    System.out.println("got server runtimes");
    int length = (int) serverRT.length;
    for (int i = 0; i < length; i++) {
    String name = (String) connection.getAttribute(serverRT[i],
    "Name");
    String state = (String) connection.getAttribute(serverRT[i],
    "State");
    System.out.println("Server name: " + name + ". Server state: "
    + state);
    }
    }

    public static void main(String[] args) throws Exception {
    /*String hostname = args[0];
    String portString = args[1];
    String username = args[2];
    String password = args[3];
    */
    String hostname = "localhost";
    String portString = "7001";
    String username = "weblogic";
    String password = "weblogic12";

    WebLogicServerRuntime s = new WebLogicServerRuntime();
    initConnection(hostname, portString, username, password);
    //s.printNameAndState();
    s.printTotalThread();
    s.getJvmRuntime();
    connector.close();
    }
    }

    运行主类

    Test.java

    package mbeanmonitor;

    import java.awt.BorderLayout;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import javax.swing.JFrame;
    import javax.swing.UIManager;

    public class Test
    {

    /**
    * @param args
    */
    public static void main(String[] args)
    {
    try
    {
    UIManager.setLookAndFeel(
    UIManager.getCrossPlatformLookAndFeelClassName());
    }
    catch (Exception e) { }

    JFrame.setDefaultLookAndFeelDecorated(true);

    JFrame frame=new JFrame("WebLogic MBean Monitor");
    RealTimeChart rtcp=new RealTimeChart("Random Data","WebLogic MBean Monitor","Value");
    frame.getContentPane().add(rtcp,new BorderLayout().NORTH);

    frame.pack();
    frame.setVisible(true);
    (new Thread(rtcp)).start();

    frame.addWindowListener(new WindowAdapter()
    {
    public void windowClosing(WindowEvent windowevent)
    {
    System.exit(0);
    }

    });
    }
    }

    运行效果

  • 相关阅读:
    angular源码分析:angular中$rootscope的实现——scope的一生
    angular源码分析:图解angular的启动流程
    angular源码分析:angular的整个加载流程
    angular源码分析:injector.js文件分析——angular中的依赖注入式如何实现的(续)
    angular源码分析:angular中jqLite的实现——你可以丢掉jQuery了
    第二章:互联网的进化成型
    angular源码分析:angular的源代码目录结构说明
    angular源码分析:angular中各种常用函数,比较省代码的各种小技巧
    angular源码分析:angular中的依赖注入式如何实现的
    【Linux】Shell基础命令、文件软(硬)链接的理解
  • 原文地址:https://www.cnblogs.com/ericnie/p/6214478.html
Copyright © 2011-2022 走看看