Tomcat 配置 JMX

 

设置密码文件很是重要,特别是在多用户的环境下。我按如下步骤在jdk 1.5.0_08jrelibmanagement目录下创建密码文件:java

---用密码模板文件(文件名jmxremote.password.template)拷贝出一个名为jmxremote.password的新文件服务器

---将密码文件的文件权限设置为只有你能读写url

---为角色设置密码,如monitorRole 和controlRolespa

---当启动JVM时系统属性已经设置成表2的样子code

 

为了可以在启动Tomcat服务器时启用远程JMX监测,要对位于CATALINA_HOME/bin目录下的 Tomcat启动脚本(catalina.bat 或catalina.sh)作以下修改:server

catalina.sh中找到 # ----- Execute The Requested Command -----------------------------------------中间件

添加以下代码:对象

CATALINA_OPTS="-Dcom.sun.management.jmxremote.port=8901ip

      -Dcom.sun.management.jmxremote.ssl=falsessl

     -Dcom.sun.management.jmxremote.authenticate=true

    -Dcom.sun.management.jmxremote.password.file=jmxremote.password

    -Dcom.sun.management.jmxremote.access.file=jmxremote.access

    -Djava.rmi.server.hostname=172.16.41.89"

 

在bin文件夹中加入jmxremote.password和jmxremote.access

jmxremote.access:

admin readwrite

monitor readonly

jmxremote.password:

admin test

monitor test

两文件的权限为400

 

Jmanager上的url地址配置

service:jmx:rmi:///jndi/rmi://localhost:8901/jmxrmi

复制catalina.sh成jmxcatalina.sh

把startup.sh中catalina.sh换成jmxcatalina.sh

实际上来讲咱们能够用jmx来监控一些java应用的运行状况,还有本身写的一些服务类的应用。

如下是咱们用来作监控的jmx源代码

 

package com.shine.framework.Jmx;  
  
import java.util.HashMap;  
import java.util.Map;  
  
import javax.management.MBeanServerConnection;  
import javax.management.ObjectName;  
import javax.management.remote.JMXConnector;  
import javax.management.remote.JMXConnectorFactory;  
import javax.management.remote.JMXServiceURL;  
  
public class JMXManager {  
    /** 
     * 创建链接 
     *  
     * @param ip 
     * @param jmxport 
     * @return 
     */  
    public static MBeanServerConnection createMBeanServer(String ip,  
            String jmxport, String userName, String password) {  
        try {  
            String jmxURL = "service:jmx:rmi:///jndi/rmi://" + ip + ":"  
                    + jmxport + "/jmxrmi";  
            // jmx  
            // url  
            JMXServiceURL serviceURL = new JMXServiceURL(jmxURL);  
  
            Map map = new HashMap();  
            String[] credentials = new String[] { userName, password };  
            map.put("jmx.remote.credentials", credentials);  
            JMXConnector connector = JMXConnectorFactory.connect(serviceURL,  
                    map);  
            MBeanServerConnection mbsc = connector.getMBeanServerConnection();  
            return mbsc;  
  
        } catch (Exception e) {  
            // e.printStackTrace();  
            System.err.println(ip + "的中间件不能够达");  
        }  
        return null;  
    }  
  
    /** 
     * 获取全部属性 
     *  
     * @param mbeanServer 
     * @param objName 
     * @return 
     */  
    public static Map getAllAttribute(MBeanServerConnection mbeanServer,  
            ObjectName objName) {  
        if (mbeanServer == null || objName == null)  
            throw new IllegalArgumentException();  
        try {  
            return null;  
        } catch (Exception e) {  
            return null;  
        }  
    }  
  
    /** 
     * 使用MBeanServer获取对象名为[objName]的MBean的[objAttr]属性值 
     * <p> 
     * 静态代码: return MBeanServer.getAttribute(ObjectName name, String attribute) 
     *  
     * @param mbeanServer 
     *            - MBeanServer实例 
     * @param objName 
     *            - MBean的对象名 
     * @param objAttr 
     *            - MBean的某个属性名 
     * @return 属性值 
     */  
    private static Object getAttribute(MBeanServerConnection mbeanServer,  
            ObjectName objName, String objAttr) {  
        if (mbeanServer == null || objName == null || objAttr == null)  
            throw new IllegalArgumentException();  
        try {  
            return String.valueOf(mbeanServer.getAttribute(objName,  
                    "currentThreadsBusy"));  
        } catch (Exception e) {  
            return null;  
        }  
    }  
  
}
相关文章
相关标签/搜索