java监控weblogic

代码

 

  1 package com.spring.earlywarning.util;
  2 
  3 import java.io.IOException;
  4 import java.net.MalformedURLException;
  5 import java.util.Hashtable;
  6 
  7 import javax.management.MBeanServerConnection;
  8 import javax.management.MalformedObjectNameException;
  9 import javax.management.ObjectName;
 10 import javax.management.remote.JMXConnector;
 11 import javax.management.remote.JMXConnectorFactory;
 12 import javax.management.remote.JMXServiceURL;
 13 import javax.naming.Context;
 14 
 15 /**
 16  * @author liuwenlong
 17  * @create 2022-03-15 21:00:59
 18  */
 19 @SuppressWarnings("all")
 20 public class PrintThread {
 21     private static MBeanServerConnection connection;
 22     private static JMXConnector connector;
 23     private static final ObjectName service;
 24     private static MBeanServerConnection ThreadPoolRuntimeconn;
 25 
 26 
 27     static {
 28         try {
 29             service = new ObjectName("com.bea:Name=RuntimeService,Type=weblogic.management.mbeanservers.runtime.RuntimeServiceMBean");
 30         } catch (MalformedObjectNameException e) {
 31             throw new AssertionError(e.getMessage());
 32         }
 33     }
 34 
 35     /**
 36      * * 打印一组 ServerRuntimeMBeans。 * 此 MBean 是运行时 MBean 层次的根, *
 37      * 此域中的每个服务器承载自己的实例。
 38      */
 39 //    public static ObjectName[] getServerRuntimes() throws Exception {
 40 //        return (ObjectName[]) connection.getAttribute(service, "ServerRuntimes");
 41 //    }
 42 
 43     public static ObjectName getThreadPoolRuntimeconn(ObjectName ObjectName) throws Exception {
 44         return (javax.management.ObjectName) connection.getAttribute(ObjectName, "ThreadPoolRuntime");
 45     }
 46 
 47     public static void initConnection(String hostname, String portString, String username, String password) throws IOException,
 48             MalformedURLException {
 49         String protocol = "t3";
 50         Integer portInteger = Integer.valueOf(portString);
 51         int port = portInteger.intValue();
 52         String jndiroot = "/jndi/";
 53         String mserver = "weblogic.management.mbeanservers.runtime";
 54         JMXServiceURL serviceURL = new JMXServiceURL(protocol, hostname,
 55                 port, jndiroot + mserver);
 56         Hashtable h = new Hashtable();
 57         h.put(Context.SECURITY_PRINCIPAL, username);
 58         h.put(Context.SECURITY_CREDENTIALS, password);
 59         h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES,
 60                 "weblogic.management.remote");
 61         connector = JMXConnectorFactory.connect(serviceURL, h);
 62         connection = connector.getMBeanServerConnection();
 63     }
 64 
 65     public static ObjectName getServerRuntimes() throws Exception {
 66         return (ObjectName) connection.getAttribute(service, "ServerRuntime");
 67     }
 68 
 69     public void printInfo() throws Exception {
 70         ObjectName objThreadPool = null;
 71         ObjectName serverRT = getServerRuntimes();
 72 
 73         String name = (String) connection.getAttribute(serverRT, "Name"); //服务器名
 74         System.out.println("服务器名:" + name);
 75 
 76         objThreadPool = (ObjectName) connection.getAttribute(serverRT, "ThreadPoolRuntime");
 77         double throughput = Double.parseDouble(String.valueOf(connection.getAttribute(objThreadPool, "Throughput")));
 78         System.out.println("吞吐量:" + throughput);
 79 
 80         ObjectName ThreadPoolRuntimeconn = getThreadPoolRuntimeconn(serverRT);
 81         int attribute = (int) connection.getAttribute(ThreadPoolRuntimeconn, "HoggingThreadCount"); //线程数
 82         System.out.println("线程数:" + attribute);
 83 
 84         int ListenPort = (int) connection.getAttribute(serverRT, "ListenPort");//监听端口
 85         System.out.println("监听端口:" + ListenPort);
 86 
 87         int executeThreadTotalCount = Integer.parseInt(String.valueOf(connection.getAttribute(objThreadPool, "ExecuteThreadTotalCount")));
 88         System.out.println("执行线程总数:" + executeThreadTotalCount);
 89 
 90 
 91         int executeThreadIdleCount = Integer.parseInt(String.valueOf(connection.getAttribute(objThreadPool, "ExecuteThreadIdleCount")));
 92         System.out.println("执行线程空闲计数:" + executeThreadIdleCount);
 93 
 94         int StandbyThreadCount = Integer.parseInt(String.valueOf(connection.getAttribute(objThreadPool, "StandbyThreadCount")));
 95         System.out.println("备用线程数:" + StandbyThreadCount);
 96 
 97 
 98         long timestamp = System.currentTimeMillis() / 1000;
 99         String metricJson = "";
100         String jsonFormat = "{\"name\": \"weblogic_threadpool_metric_demo\", " +
101                 "\"command\":\"weblogic_threadpool_metric\"," +
102                 "\"type\": \"metric\"," +
103                 "\"handlers\": [\"influxdb\"]," +
104                 "\"output\": \"%s %.5f %d\\n%s %d %d\\n%s %d %d\\n\"," +
105                 "\"status\": 0}";
106         metricJson = String.format(jsonFormat,
107                 ".weblogic.threadpool.throughput", (double) throughput, timestamp,
108                 ".weblogic.threadpool.executeThreadTotalCount", (int) executeThreadTotalCount, timestamp,
109                 ".weblogic.threadpool.executeThreadIdleCount", (int) executeThreadIdleCount, timestamp);
110         System.out.println("metricJson==" + metricJson);
111 
112 
113     }
114 
115     /**
116      *
117      * @param args
118      * @throws Exception
119      */
120     public static void main(String args[]) throws Exception {
121         String hostname = "localhost";
122         String portString = "7003";
123         String username = "weblogic";
124         String password = "123456";
125         PrintThread s = new PrintThread();
126         initConnection(hostname, portString, username, password);
127         s.printInfo();
128         connector.close();
129     }
130 }

 

 

 

运行结果

 

 

  

报错情况一、

1 java.net.MalformedURLException: Unsupported protocol: t3
2 at javax.management.remote.JMXConnectorFactory.newJMXConnector(JMXConnectorFactory.java:357)
3 at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:267)
4 at com.whm.test.weblogic.WeblogicProbeJava.initConnection(WeblogicProbeJava.java:63)
5 at com.whm.test.weblogic.WeblogicProbeJava.main(WeblogicProbeJava.java:418)

报错情况二、

 1 Exception in thread "main" java.lang.NoClassDefFoundError: weblogic/rmi/extensions/DisconnectListener
 2 at java.lang.ClassLoader.defineClass1(Native Method)
 3 at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
 4 at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
 5 at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
 6 at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
 7 at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
 8 at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
 9 at java.security.AccessController.doPrivileged(Native Method)
10 at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
11 at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
12 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
13 at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
14 at java.lang.Class.forName0(Native Method)
15 at java.lang.Class.forName(Class.java:274)

以上两种报错,解决方法:

引入两个jar包即可:wlclient.jar,wljmxclient.jar(这两个包在我网盘里。链接:链接:https://pan.baidu.com/s/1nrdcVHIyucq5U4TRxwCZQw 提取码:olhb  --来自百度网盘超级会员V3的分享) 

 

 

 找到jar包存放的位置,然后导入即可

 

posted @ 2022-03-15 21:38  勤快的懒羊羊  阅读(204)  评论(0编辑  收藏  举报