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);
}

});
}
}

运行效果

WebLogic MBean Monitor的更多相关文章

  1. monitor weblogic server ,Very simple to use, weblogic监控、巡检、故障简单小工具

        1. 开发了一个简单的监视weblogic执行情况的小程序.各位朋友下载下来试试,不用登陆console就能够知道server的执行状况,包含了jvm.线程.jdbc.状态jms等:另一个更简 ...

  2. JMX monitor weblogic 总结

    https://blog.csdn.net/joy_91/article/details/42774839

  3. WebLogic: The Definitive Guide examined WebLogic's security mechanisms--reference

    reference from: http://www.onjava.com/pub/a/onjava/excerpt/weblogic_chap17/index1.html?page=1 ...... ...

  4. weblogic 的应用 常见问题处理 db2 链接不上(转载)

    xingkaistart weblogic10之Failed to initialize the application 'wss-1-1' due to error weblogic. Weblog ...

  5. weblogic JDBC Connection Pools--转官方文档

    http://docs.oracle.com/cd/E13222_01/wls/docs81/ConsoleHelp/jdbc_connection_pools.html#1106016 JDBC C ...

  6. weblogic的集群与配置

    目录(?)[-] 1.Weblogic的集群 2.创建Weblogic集群前的规划 3.开始创建我们的Weblogic集群 1.1 创建集群的总控制端aminserver 2.2 创建集群中的节点my ...

  7. 【转】Weblogic的集群

    原文链接:http://www.cnblogs.com/HondaHsu/p/4267972.html 一.Weblogic的集群 还记得我们在第五天教程中讲到的关于Tomcat的集群吗? 两个tom ...

  8. tomcat,Jboss,weblogic区别与比较

    一.tomcat Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,它是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心 ...

  9. WebLogic Exception

    访问Weblogic发生以下异常: 2013-08-20 10:15:11 ERROR [ExceptionConvertOnlyFilter] doFilter (line:70) Could no ...

随机推荐

  1. Linux ssh的使用

    1.查看SSH客户端版本 有的时候需要确认一下SSH客户端及其相应的版本号.使用ssh -V命令可以得到版本号.需要注意的是,Linux一般自带的是OpenSSH: 下面的例子即表明该系统正在使用Op ...

  2. Codeforces 940F Machine Learning 带修改莫队

    题目链接 题意 给定一个长度为\(n\)的数组\(a\),\(q\)个操作,操作分两种: 对于区间\([l,r]\),询问\(Mex\{c_0,c_1,c_2,⋯,c_{10^9}\}\),其中\(c ...

  3. 时间模块(time/date)

    在Python中,常用的表示方式的时间有:时间戳,字符串时间,元组时间(既年,月,日,时,分,秒,周几,一年中的第几天,时区)     time模块:   time.timezone: 获取当前标准时 ...

  4. python面向对象进阶(上)

    一 .isinstance(obj,cls)和issubclass(sub,super) (1)isinstance(obj,cls)检查对象obj是否是类 cls 的对象,返回True和Flase ...

  5. 转:Android 的一些比较好的开源代码项目

    转自:http://blog.csdn.net/zengyangtech/article/details/7019439 Android PDF 阅读器 http://sourceforge.net/ ...

  6. ubuntu16.04搭建个人简易DLP

    前言 最近一朋友让我帮忙搭建一台服务器,用做公司的服务器,但是该服务器需要满足一些安全要求,于是乎就有了下面的解决过程^_^ 需求 期望普通用户和管理员都能ssh登陆服务器,但禁止scp或者其他方式下 ...

  7. Codeforces 219D Choosing Capital for Treeland 2次DP

    //选择一个根使得变换最少边的方向使得能够到达所有点#include <map> #include <set> #include <list> #include & ...

  8. 架设Hmailserver+webmail邮件服务器

    架设Hmailserver+webmail邮件服务器   在安裝Hmailserver前先安裝Apache.php.mysql,如果你想懶點直接到http://www.phpnow.org下載phpn ...

  9. AC日记——[Sdoi2008]Cave 洞穴勘测 bzoj 2049

    2049 思路: lct模板: 代码: #include <cstdio> #include <cstring> #include <iostream> #incl ...

  10. Spring:基于注解的依赖注入的使用

    1.什么是pojo?什么是bean? 首先,在之前几篇Spring的介绍文章当中,自己都提到了一个名词叫做POJO类,但是在回顾Spring的注解的使用的时候,去形容java当中的对象还有一个名词是叫 ...