MC4J遠程監測Tomcat集群-JMX助Tomcat2(圖)

發表于:2007-06-22來源:作者:點擊數: 標簽:
以編程的方式連接JMX代理 在探討如何用MC4J監測 Tomcat 之前,我們先簡略地看一個通過遠程JMX API連接遠程JMX代理(這里指的是Tomcat servlet容器)的 Java 應用示例。以啟用JMX監控的方式啟動Tomcat。 這個JMX遠程客戶端示例被稱為RemoteJMXClient,基本上

   
  以編程的方式連接JMX代理
  
  在探討如何用MC4J監測Tomcat之前,我們先簡略地看一個通過遠程JMX API連接遠程JMX代理(這里指的是Tomcat servlet容器)的Java應用示例。以啟用JMX監控的方式啟動Tomcat。
  

  這個JMX遠程客戶端示例被稱為RemoteJMXClient,基本上是一個獨立的、起到JMX連接器作用的Java應用程序。該Java類位于Web應用示例的src\com\remotejmx\client目錄下,運行這個Java應用程序時要在classpath中添加jmx-remote.jar和jmxri.jar文件。以下步驟說明了如何連接遠程JMX服務器
  
  1.以協議、主機名、遠程JMX端口號和憑證哈希表(存有用戶名和密碼)為參數創建JMXServiceURL對象:
  
  JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:8999/jmxrmi");  Map map = new HashMap();  String[] credentials = new String[] { "monitorRole" , "QED" };  map.put("jmx.remote.credentials", credentials);
  
  2.用第一步中得到的url和憑證哈希表創建JMXConnector對象,在獲得了JMX連接器的引用后,調用getConnectionId()方法來確保得到一個有效的連接ID:
  
  JMXConnector conn = JMXConnectorFactory.connect(url, map);  System.out.println("JMXConnector="+conn.toString());  String id = conn.getConnectionId();  System.out.println("Connection Id=" + id);
  
  3.接下來從JMXConnector對象中獲得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]);  }
  
  4.在獲得MBeanserverConnection對象后,你就可以象調用連接到本地JMX服務器(在同一個JVM虛擬機上)的MBeanserver那樣調用MBeans有關的方法。你可以查看JMX服務器上域的數量和類型,還能獲取在該服務器上注冊的MBeans的數量、屬性及操作。下面的代碼片斷展示了這一過程:
  
  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]);  }  // Get MBeans count  Integer MBeansCount = mbsc.getMBeansCount();  System.out.println("MBeansCount : " + MBeansCount.intValue());
  
  5.接下來查詢服務器上的MBeans,顯示它們的屬性和操作,檢索有關集群對象類型的MBeans細節,就像下面的代碼展示的那樣。在下一節我們會用MC4J看到同樣的集群細節。
  
  Set MBeanset = mbsc.queryMBeans(null, null);  System.out.println("MBeanset.size() : " + MBeanset.size());  Iterator 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 (canonicalName.equals("Catalina:host=localhost,type=Cluster"))   {     // Get details of cluster MBeans     System.out.println("Cluster MBeans Details:");     System.out.println("=========================================");     getMBeansDetails(canonicalName);   }   String canonicalKeyPropList = objectName.getCanonicalKeyPropertyListString();  }
  
  6.最后關閉JMX MBeans連接并釋放資源:
  
  conn.close();
  
  Web應用示例安裝
  
  本節用一個Web應用示例來測試Tomcat集群的宕機(failover)和session復制。我在兩個集群節點上部署Web應用,還編寫了一個客戶端程序,用來做在servlet容器里創建和修改HTTP session的負載測試。
  
  通過以下步驟啟動服務器集群及負載均衡:
  
  1.啟動兩個服務器實例并啟用JMX監測功能。
  
  2.啟動負載均衡。我用的是Pen-一個簡單的、基于TCP協議的負載均衡工具,它基于一些算法來分配負載,比如輪循算法,能自動檢測到宕機的服務器并將客戶請求轉發到集群中其它可用的服務器上。有關安裝和配置Pen的詳細情況參見Pen的網頁。
  
  我用下面的命令啟動負載均衡,負載分配算法選項用的是輪循算法:
  
  pen -r -a -f -d localhost:8080 192.168.0.10:9080 192.168.0.20:10080
  
  其中:
  
  ---r:用輪循算法處理負載均衡
  ---a:用ASCII碼打印傳入/傳出數據
  ---f:前臺方式運行
  ---d:啟用Debug模式
  
  3.雙擊可執行文件(C:\dev\tools\mc4j\MC4J Console 1.2b9.exe)啟動MC4J(注:在這個應用示例中,我在同一臺機器上運行JMX客戶端和Tomcat集群,但在真實的場景中,JMX客戶端是在遠程機上運行,而不是在應用服務器上),啟動后MC4J的控制臺應該如圖2所示:
  
 MC4J遠程監測Tomcat集群-JMX助Tomcat2(圖)(圖一)
點擊查看大圖

  
圖2 MC4J控制臺窗口的截圖。

  
  控制臺啟動后,創建一個新的連接綁定到JMX服務器上。用Management菜單的Create Server Connection選項新建一個連接,命名為Tomcat-5.5.9-instance1,該連接的設置如表4所示:
  
  表4 MC4J的Tomcat連接設置
  
 MC4J遠程監測Tomcat集群-JMX助Tomcat2(圖)(圖二)

  注意:你需要在classPathEntries參數中指定catalina.jar、catalina-cluster.jar和 catalina-optional.jar文件(位于%CATALINA_HOME%\server\lib\目錄下)。
  
  當Tomcat服務器群啟用了遠程JMX,再將配置好的MC4J連接到這些服務器上,我們就可以運行java測試客戶端并用Log4J記錄sesion的詳細情況。在下一節我們將看到測量層的細節以及測試客戶端運行時的參數。
  
  測量層
  
  我用多線程模式運行客戶端,并指定迭代的次數,每達到100次請求對session復制的詳細情況(如在集群中傳遞session發生變化以及處理請求花費的時間)做一個記錄,同時用JMX控制臺對session細節進行監測。我們按以下步驟運行測試客戶端并監測服務器統計數據:
  
  1.運行客戶端:我用SessionReplicationClient仿真對Tomcat服務器群的負載測試,采用了以下設置:
  
  ---線程數:2
  ---迭代次數:1,000
  ---請求間隔:1,000 毫秒
  ---測試樣本數量:1,000
  
  2.用MC4J控制臺監測集群元素:如圖3所示,你可以通過Cluster 和 ClusterSender組件來監測集群的細節,比如復制模式(replicationMode)、請求數量(nrOfRequests)以及數據傳輸總量(totalBytes),都會顯示在屬性窗口中。
  
 MC4J遠程監測Tomcat集群-JMX助Tomcat2(圖)(圖三)
點擊查看大圖

  
圖3 Tomcat集群MBeans的截圖。

  
  3.用session管理MBeans檢查session細節:圖4顯示了HTTP session的詳細情況,包括session數量、活動session數和超時session數。你還可以從日志文件中了解到session復制需要的時間。
  
MC4J遠程監測Tomcat集群-JMX助Tomcat2(圖)(圖四)
點擊查看大圖

  
圖4 session細節的截圖。

  
  至此你已看到了如何通過遠程JMX提供的API查看Tomcat服務器集群和session復制的運行時細節,以及如何通過JMX客戶端的圖形用戶界面查看這些細節而無需任何JMX編碼。
  
  小結
  
  在本文中你看到了如何運用JMX MBeans技術以及在JMX控制臺(MC4J)的幫助下從遠程監測Tomcat服務器(特別是集群和session復制模塊),你會發現用J2SE 5.0提供的JMX技術監測J2EE應用服務器(或者servlet容器)是多么的方便和強大。
  
  使用JMX技術來監測和管理服務器,開發者、網管和運營部門都可以從中獲益。有了遠程JMX技術,開發者可以監測他們在服務器上的應用程序,發現J2EE應用中需要調整和優化的瓶頸,從而改善應用的性能和伸縮性。網管可以看到服務器的統計數字,如CPU使用率、線程數、內存使用率,以評估當前和未來的負載量需求。運營部門可以通過遠程JMX監測來檢查服務器狀態和閥值溢出警報,提前發現任何與服務器有關的問題。
  
  在使用JMX監測應用服務器時安全是另一個要考慮的重要因素,特別是在產品環境下。比如必須通過安全可控的方式(使用用戶名、密碼)訪問JMX控制臺,只允許經過授權的用戶訪問、查看和修改MBeans的屬性和操作。系統管理員應當在服務器監測控制臺上對MBeans屬性和操作級別的訪問進行細粒度的控制,還要將所有的基于JMX訪問用戶的活動記錄到日志文件中供以后的報告和審計之用。
  
  JMX客戶端為遠程綁定到各種應用服務器、監測服務器狀態以及運行于這些服務器之上的應用提供了一個集中的監測控制臺。在企業對其所有的服務器和應用進行生命期管理方面,遠程JMX監測是個相當不錯的解決方案。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97