windows下JMX串連Tomcat

來源:互聯網
上載者:User

OS:win7

jdk:1.6

Tomcat:7.0.26

1.Java的環境變數配置正確,網上很多,不再說了

2.修改Tomcat目錄下的bin\catalina.bat

在該檔案中尋找set JAVA_OPTS=%JAVA_OPTS%,下面有一行為:

rem ----- Execute The Requested Command ---------------------------------------

在這一行的下面加

set JAVA_OPTS=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9008 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

說明:9008為連接埠號碼,一會兒要用到。很多地方說tomcat需要許可權驗證,可是我這裡沒有用到,就可以串連成功,所以沒有測試密碼檔案,僅將Dcom.sun.management.jmxremote.authenticate的值設為false。

3.記得編輯完bin\catalina.bat後,一定要雙擊執行。直接雙擊就可以,不要在cmd中執行,我執行出錯(不知道為什麼)

4.雙擊bin\startup.bat,最好雙擊執行,我在cmd中執行,無法啟動Tomcat

5.在cmd中執行netstat -an,可查看到9008連接埠已經啟用,說明Tomcat的Jmx配置成功


6.在cmd中敲入:jconsole(這個exe令在C:\Program Files\Java\jdk1.6.0_23\bin,即安裝目錄的bin下),即可啟動jconsole的管理介面,在介面中輸入如下內容:

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


或者

localhost:9008

即可進入管理介面,在管理介面的Tab頁MBeans中,可以看到所有的MBeans


此時,Jmx監控Tomcat配置成功!

OS:xp

jdk:1.6

Tomcat:6.0.29

1.Java的環境變數配置正確,網上很多,不再說了

2.修改Tomcat目錄下的bin\catalina.bat

在該檔案中尋找set JAVA_OPTS=%JAVA_OPTS%,下面有一行為:

rem ----- Execute The Requested Command ---------------------------------------

在這一行的下面加

set JAVA_OPTS=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9008 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

說明:9008為連接埠號碼,一會兒要用到。很多地方說tomcat需要許可權驗證,可是我這裡沒有用到,就可以串連成功,所以沒有測試密碼檔案,僅將Dcom.sun.management.jmxremote.authenticate的值設為false。

3.記得編輯完bin\catalina.bat後,一定要雙擊執行。直接雙擊就可以,不要在cmd中執行,我執行出錯(不知道為什麼)

4.雙擊bin\startup.bat,最好雙擊執行,我在cmd中執行,無法啟動Tomcat

5.在cmd中執行netstat -an,可查看到9008連接埠已經啟用,說明Tomcat的Jmx配置成功


6.在cmd中敲入:jconsole(這個exe令在C:\Program Files\Java\jdk1.6.0_23\bin,即安裝目錄的bin下),即可啟動jconsole的管理介面,在介面中輸入如下內容:

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


或者

localhost:9008

即可進入管理介面,在管理介面的Tab頁MBeans中,可以看到所有的MBeans


此時,Jmx監控Tomcat配置成功!

下面在代碼中使用Jmx擷取Tomcat中MBean的值

OS:xpjdk:1.6Tomcat:6.0.291.Java的環境變數配置正確,網上很多,不再說了2.修改Tomcat目錄下的bin\catalina.bat  在該檔案中尋找set JAVA_OPTS=%JAVA_OPTS%,下面有一行為:  rem ----- Execute The Requested Command ---------------------------------------  在這一行的下面加  set JAVA_OPTS=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9008 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false  說明:9008為連接埠號碼,一會兒要用到。很多地方說tomcat需要許可權驗證,可是我這裡沒有用到,就可以串連成功,所以沒有測試密碼檔案,僅將Dcom.sun.management.jmxremote.authenticate的值設為false。3.記得編輯完bin\catalina.bat後,一定要雙擊執行。直接雙擊就可以,不要在cmd中執行,我執行出錯(不知道為什麼)4.雙擊bin\startup.bat,最好雙擊執行,我在cmd中執行,無法啟動Tomcat5.在cmd中執行netstat -an,可查看到9008連接埠已經啟用,說明Tomcat的Jmx配置成功  6.在cmd中敲入:jconsole(這個exe令在C:\Program Files\Java\jdk1.6.0_23\bin,即安裝目錄的bin下),即可啟動jconsole的管理介面,在介面中輸入如下內容:service:jmx:rmi:///jndi/rmi://localhost:9008/jmxrmi或者localhost:9008即可進入管理介面,在管理介面的Tab頁MBeans中,可以看到所有的MBeans此時,Jmx監控Tomcat配置成功!  下面在代碼中使用Jmx擷取Tomcat中MBean的值import java.util.*;import javax.management.*;import javax.management.remote.*;;public class JmxTest {  public static void main(String[] args) {  // TODO Auto-generated method stub  try  {   --這裡的url是在中輸入的url   JMXServiceURL url=new JMXServiceURL  ("service:jmx:rmi:///jndi/rmi://localhost:9008/jmxrmi");    //Map<String, String[]> map = new HashMap();      //String[] credentials=new String[]   {"monitorRole","QED"};    //map.put("jmx.remote.credentials",credentials);      JMXConnector conn=JMXConnectorFactory.connect(url);   System.out.println("JMXConnector="+conn.toString());   String id=conn.getConnectionId();   System.out.println("Connection Id=" + id);      MBeanServerConnection mbsc = conn.getMBeanServerConnection();   String domains[]=mbsc.getDomains();   System.out.println("# of domains="+domains.length);   for (int i = 0; i < domains.length; i++)   {    System.out.println("Domain[" + i + "]=" + domains[i]);     }         Set<ObjectInstance> MBeanset = mbsc.queryMBeans(null, null);   System.out.println("MBeanset.size() : " + MBeanset.size());   Iterator<ObjectInstance> MBeansetIterator = MBeanset.iterator();   while (MBeansetIterator.hasNext())   {    ObjectInstance objectInstance = (ObjectInstance)MBeansetIterator.next();    ObjectName objectName= objectInstance.getObjectName();    String canonicalName= objectName.getCanonicalName();        System.out.println("canonicalName : " + canonicalName);    --在中,有Catalina:type=Server的port的值8005,運行程式後,在控制台能看到擷取成功    if (objectName.toString().equals("Catalina:type=Server"))    {     // Get details of cluster MBeans     String s = mbsc.getAttribute(objectName, "port").toString();     System.out.println("=========================================");      System.out.println(s);     System.out.println("=========================================");    }    //String canonicalKeyPropList=objectName.getCanonicalKeyPropertyListString();   }    conn.close();  }  catch(Exception ex)  {   System.out.println("Illegal Argument Exception: " + ex);     } }}

下面是經過整理的代碼,裡面有一部分垃圾代碼,大家可以選擇性的看。

import java.math.BigDecimal;import java.util.*;import javax.management.*;import javax.management.remote.*;import javax.naming.Context;public class JmxTest {  public static void main(String[] args) {  JMXConnector conn = null;  try  {   MBeanServerConnection mbsc = ConnJmx(conn);      String KeyName = "";   String objectName = "";   String attributeName = "";   String attributeKey = "";   String value = "";      objectName = "java.lang:type=Memory";   attributeName = "NonHeapMemoryUsage";   attributeKey = "init";   value = GetValueByKey(objectName, attributeName, attributeKey);   PrintContext(attributeName,value);      KeyName = "進程數";   objectName = "java.lang:type=Threading";   attributeName = "ThreadCount";   attributeKey = "";   value = GetValueByKey(mbsc, objectName, attributeName, attributeKey);   PrintContext(attributeName,value);      KeyName = "正常已耗用時間";   objectName = "java.lang:type=Runtime";   attributeName = "Uptime";   attributeKey = "";   value = GetValueByKey(mbsc, objectName, attributeName, attributeKey);   //System.out.println(attributeName + "=" + value);   //value = ConvertMillToText(Long.parseLong(value));   PrintContext(attributeName,value);  }  catch(Exception ex)  {   System.out.println("Exception: " + ex);     }  finally  {   try   {    if (conn != null)    {     conn.close();    }   }   catch(Exception ex1){}  } }  private static void PrintContext(String key, String value) {  System.out.println(key + "=" + value); }  //從毫秒轉至小時分鐘 private static String ConvertMillToText(long millsecond)throws Exception {  try  {   String s = "";   double d = (double)millsecond / (double)(1000*60*60);   BigDecimal b = new BigDecimal(d);   int hour = (int)Math.floor(d);   double minute = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();   if (hour > 0)   {    s = hour + " 小時 ";   }   minute = (minute - hour) * 60;   b = new BigDecimal(minute);   minute = b.setScale(0, BigDecimal.ROUND_HALF_UP).doubleValue();   s += (int)minute + " 分鐘";   return s;  }  catch(Exception ex)  {   System.out.println("Exception: " + ex);     throw ex;  } }  //串連到jmx private static MBeanServerConnection ConnJmx(JMXConnector conn)throws Exception {  try  {   String _value = "";      JMXServiceURL url = new JMXServiceURL  ("service:jmx:iiop:///jndi/corbaname::1.2@192.168.1.146:6888#jmx/rmi/RMIConnectorServer");   HashMap map = new HashMap();     String[] credentials=new String[]   {"admin","admin"};   map.put("jmx.remote.credentials",credentials);      conn = JMXConnectorFactory.connect(url, map);   String id=conn.getConnectionId();      MBeanServerConnection mbsc = conn.getMBeanServerConnection();   return mbsc;  }  catch(Exception ex)  {   System.out.println("Illegal Argument Exception: " + ex);   throw ex;  } }  //從MBeanServerConnection中取值 private static String GetValueByKey(MBeanServerConnection mbsc, String objectName, String attributeName, String attributeKey)throws Exception {  try  {   String _value = "";   ObjectName _objectName = new ObjectName(objectName);   if (attributeKey.equals(""))   {    _value = mbsc.getAttribute(_objectName, attributeName).toString();   }   else   {    javax.management.openmbean.CompositeData data = (javax.management.openmbean.CompositeData)mbsc.getAttribute(_objectName, attributeName);    _value = data.get(attributeKey).toString();   }      return _value;  }  catch(Exception ex)  {   System.out.println("Illegal Argument Exception: " + ex);   throw ex;  } }   private static String GetValueByKey(String objectName, String attributeName, String attributeKey)throws Exception {  JMXConnector conn = null;  try  {   String _value = "";      JMXServiceURL url=new JMXServiceURL  ("service:jmx:iiop:///jndi/corbaname::1.2@192.168.1.146:6888#jmx/rmi/RMIConnectorServer");   HashMap map = new HashMap();     String[] credentials=new String[]   {"admin","admin"};   map.put("jmx.remote.credentials",credentials);      conn = JMXConnectorFactory.connect(url, map);   String id=conn.getConnectionId();      MBeanServerConnection mbsc = conn.getMBeanServerConnection();   //Set<ObjectInstance> MBeanset = mbsc.queryMBeans("java.lang:type=Memory", null);   //Set<ObjectInstance> MBeanset = mbsc.queryMBeans(null, null);   ObjectName _objectName = new ObjectName(objectName);   if (attributeKey.equals(""))   {    _value = mbsc.getAttribute(_objectName, attributeName).toString();   }   else   {    javax.management.openmbean.CompositeData data = (javax.management.openmbean.CompositeData)mbsc.getAttribute(_objectName, attributeName);    _value = data.get(attributeKey).toString();   }      return _value;  }  catch(Exception ex)  {   System.out.println("Illegal Argument Exception: " + ex);   throw ex;  }  finally  {   if (conn != null)   {    conn.close();   }  } }   private static void TestConn()throws Exception {  JMXConnector conn = null;  try  {   //JMXServiceURL url=new JMXServiceURL  ("service:jmx:rmi:///jndi/rmi://localhost:9008/jmxrmi");   JMXServiceURL url=new JMXServiceURL  ("service:jmx:iiop:///jndi/corbaname::1.2@192.168.1.146:6888#jmx/rmi/RMIConnectorServer");   HashMap map = new HashMap();     String[] credentials=new String[]   {"admin","admin"};   map.put("jmx.remote.credentials",credentials);      conn = JMXConnectorFactory.connect(url, map);   System.out.println("JMXConnector="+conn.toString());   String id=conn.getConnectionId();   System.out.println("Connection Id=" + id);      MBeanServerConnection mbsc = conn.getMBeanServerConnection();   String domains[]=mbsc.getDomains();   System.out.println("# of domains="+domains.length);   for (int i = 0; i < domains.length; i++)   {    System.out.println("Domain[" + i + "]=" + domains[i]);     }      Set<ObjectInstance> MBeanset = mbsc.queryMBeans(null, null);   System.out.println("MBeanset.size() : " + MBeanset.size());   Iterator<ObjectInstance> MBeansetIterator = MBeanset.iterator();   while (MBeansetIterator.hasNext())   {    ObjectInstance objectInstance = (ObjectInstance)MBeansetIterator.next();    ObjectName objectName= objectInstance.getObjectName();    String canonicalName= objectName.getCanonicalName();        System.out.println("canonicalName : " + canonicalName);    if (objectName.toString().equals("Catalina:type=Server"))    {     // Get details of cluster MBeans     String s = mbsc.getAttribute(objectName, "port").toString();     System.out.println("=========================================");      System.out.println(s);     System.out.println("=========================================");    }    //String canonicalKeyPropList=objectName.getCanonicalKeyPropertyListString();   }    conn.close();  }  catch(Exception ex)  {   System.out.println("Illegal Argument Exception: " + ex);     throw ex;  }  finally  {   if (conn != null)   {    conn.close();   }  } }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.