zoukankan      html  css  js  c++  java
  • 利用JMX来监控大部分java应用

    JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。

       实际上来说我们可以用jmx来监控一些java应用的运行情况,还有自己写的一些服务类的应用。

       以下是我们用来做监控的jmx源代码

    [java] view plain copy
     
    1. package com.shine.framework.Jmx;  
    2.   
    3. import java.util.HashMap;  
    4. import java.util.Map;  
    5.   
    6. import javax.management.MBeanServerConnection;  
    7. import javax.management.ObjectName;  
    8. import javax.management.remote.JMXConnector;  
    9. import javax.management.remote.JMXConnectorFactory;  
    10. import javax.management.remote.JMXServiceURL;  
    11.   
    12. public class JMXManager {  
    13.     /** 
    14.      * 建立连接 
    15.      *  
    16.      * @param ip 
    17.      * @param jmxport 
    18.      * @return 
    19.      */  
    20.     public static MBeanServerConnection createMBeanServer(String ip,  
    21.             String jmxport, String userName, String password) {  
    22.         try {  
    23.             String jmxURL = "service:jmx:rmi:///jndi/rmi://" + ip + ":"  
    24.                     + jmxport + "/jmxrmi";  
    25.             // jmx  
    26.             // url  
    27.             JMXServiceURL serviceURL = new JMXServiceURL(jmxURL);  
    28.   
    29.             Map map = new HashMap();  
    30.             String[] credentials = new String[] { userName, password };  
    31.             map.put("jmx.remote.credentials", credentials);  
    32.             JMXConnector connector = JMXConnectorFactory.connect(serviceURL,  
    33.                     map);  
    34.             MBeanServerConnection mbsc = connector.getMBeanServerConnection();  
    35.             return mbsc;  
    36.   
    37.         } catch (Exception e) {  
    38.             // e.printStackTrace();  
    39.             System.err.println(ip + "的中间件不可以达");  
    40.         }  
    41.         return null;  
    42.     }  
    43.   
    44.     /** 
    45.      * 获取所有属性 
    46.      *  
    47.      * @param mbeanServer 
    48.      * @param objName 
    49.      * @return 
    50.      */  
    51.     public static Map getAllAttribute(MBeanServerConnection mbeanServer,  
    52.             ObjectName objName) {  
    53.         if (mbeanServer == null || objName == null)  
    54.             throw new IllegalArgumentException();  
    55.         try {  
    56.             return null;  
    57.         } catch (Exception e) {  
    58.             return null;  
    59.         }  
    60.     }  
    61.   
    62.     /** 
    63.      * 使用MBeanServer获取对象名为[objName]的MBean的[objAttr]属性值 
    64.      * <p> 
    65.      * 静态代码: return MBeanServer.getAttribute(ObjectName name, String attribute) 
    66.      *  
    67.      * @param mbeanServer 
    68.      *            - MBeanServer实例 
    69.      * @param objName 
    70.      *            - MBean的对象名 
    71.      * @param objAttr 
    72.      *            - MBean的某个属性名 
    73.      * @return 属性值 
    74.      */  
    75.     private static Object getAttribute(MBeanServerConnection mbeanServer,  
    76.             ObjectName objName, String objAttr) {  
    77.         if (mbeanServer == null || objName == null || objAttr == null)  
    78.             throw new IllegalArgumentException();  
    79.         try {  
    80.             return String.valueOf(mbeanServer.getAttribute(objName,  
    81.                     "currentThreadsBusy"));  
    82.         } catch (Exception e) {  
    83.             return null;  
    84.         }  
    85.     }  
    86.   
    87. }  

     下面我补充一下怎么开启tomcat和weblogic的服务吧

    首先在domain找到需要监控的工程,例如sourceview ,D:/Weblogic/user_projects/domains/sourceview。然后打开它的startWebLogic.cmd的加上 set JAVA_OPTIONS=%JAVA_OPTIONS% 
    -Dcom.sun.management.jmxremote 
    -Dcom.sun.management.jmxremote.port=8050 
    -Dcom.sun.management.jmxremote.ssl=false 
    -Dcom.sun.management.jmxremote.authenticate=true 
    -Dcom.sun.management.jmxremote.access.file=D:/temp/jmxremote.access 
    -Dcom.sun.management.jmxremote.password.file=D:/temp/jmxremote.password

    Tomcat加入jmx监控比weblogic要容易,可以获取到的mib也要比weblogic10要多,首先我 们找到bin目录底下:

     

    catalina.bat 用于修改windows的jmx的,catalina.sh用于修改Linux的jmx。具体修改方 法是一样的。
    在 rem ----- Execute The Requested Command --------------------------------------- 
    加入: 
    set JAVA_OPTS=-Dcom.sun.management.jmxremote 
    -Dcom.sun.management.jmxremote.port=8050 
    -Dcom.sun.management.jmxremote.ssl=false 
    -Dcom.sun.management.jmxremote.authenticate=true 
    -Dcom.sun.management.jmxremote.access.file=D:/temp/jmxremote.access 
    -Dcom.sun.management.jmxremote.password.file=D:/temp/jmxremote.password

    如果同样遇到提示 必须限制口令文件的读取权限,可以按照weblogic一样的解决办法。 
    或者: 
    set JAVA_OPTS=-Dcom.sun.management.jmxremote 
    -Dcom.sun.management.jmxremote.port=8050 
    -Dcom.sun.management.jmxremote.ssl=false 
    -Dcom.sun.management.jmxremote.authenticate=false 
    -Dcom.sun.management.jmxremote.access.file=D:/temp/jmxremote.access 
    -Dcom.sun.management.jmxremote.password.file=D:/temp/jmxremote.password

    附件:temp/jmxremote.access和temp/jmxremote.password

  • 相关阅读:
    gulp安装
    ssh公钥自动登陆
    Laravel 依赖注入原理
    mac添加环境变量
    get和post的区别
    CPU进程与线程的关系和区别
    微信支付开发+{ping++}微信支付托管
    git学习笔记
    消除 activity 启动时白屏、黑屏问题
    转:android中APK开机自动运行
  • 原文地址:https://www.cnblogs.com/hushaojun/p/6073957.html
Copyright © 2011-2022 走看看