• 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包存放的位置,然后导入即可

  • 相关阅读:
    LTE第一章 介绍
    一本关于 LTE 非常好的书籍
    Memcached安装卸载
    很好很实用的.net、网站系统后台模板
    MS SQL 当记录不存在时插入insert INTO not exists
    数据库存储过程缺点总结
    存储过程是罪恶
    树形数据查询示例
    安装Discuz!论坛时提示“mysqli_connect() 不支持 advice_mysqli_connect”
    sql server中将一个表中的部分数据插入到另一个表中
  • 原文地址:https://www.cnblogs.com/lwl80/p/16010585.html
Copyright © 2020-2023  润新知