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;  
        }  
    }  
  
}
相關文章
相關標籤/搜索