熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

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

2013-11-23 20:19:29  來源: Java開源技術 

  以編程的方式連接JMX代理
  
  在探討如何用MCJ監測Tomcat之前我們先簡略地看一個通過遠程JMX API連接遠程JMX代理(這裡指的是Tomcat servlet容器)的Java應用示例以啟用JMX監控的方式啟動Tomcat
  
  這個JMX遠程客戶端示例被稱為RemoteJMXClient基本上是一個獨立的起到JMX連接器作用的Java應用程序該Java類位於Web應用示例的src\com\remotejmx\client目錄下運行這個Java應用程序時要在classpath中添加jmxremotejar和jmxrijar文件以下步驟說明了如何連接遠程JMX服務器
  
  以協議主機名遠程JMX端口號和憑證哈希表(存有用戶名和密碼)為參數創建JMXServiceURL對象
  
  JMXServiceURL url = new JMXServiceURL(service:jmx:rmi:///jndi/rmi://localhost:/jmxrmi);  Map map = new HashMap();  String[] credentials = new String[] { monitorRole QED };  mapput(jmxremotecredentials credentials);
  
  用第一步中得到的url和憑證哈希表創建JMXConnector對象在獲得了JMX連接器的引用後調用getConnectionId()方法來確保得到一個有效的連接ID:
  
  JMXConnector conn = JMXnnect(url map);  Systemoutprintln(JMXConnector=+conntoString());  String id = conngetConnectionId();  Systemoutprintln(Connection Id= + id);
  
  接下來從JMXConnector對象中獲得MBeanserverConnection對象
  
  mbsc = conngetMBeanserverConnection();  String domains[] = mbscgetDomains();  Systemoutprintln(# of domains=+domainslength);  for (int i = ; i < domainslength; i++) {    Systemoutprintln(Domain[ + i + ] = + domains[i]);  }
  
  在獲得MBeanserverConnection對象後你就可以象調用連接到本地JMX服務器(在同一個JVM虛擬機上)的MBeanserver那樣調用MBeans有關的方法你可以查看JMX服務器上域的數量和類型還能獲取在該服務器上注冊的MBeans的數量屬性及操作下面的代碼片斷展示了這一過程
  
  mbsc = conngetMBeanserverConnection();  String domains[] = mbscgetDomains();  Systemoutprintln(# of domains=+domainslength);  for (int i = ; i < domainslength; i++) {    Systemoutprintln(Domain[ + i + ] = + domains[i]);  }  // Get MBeans count  Integer MBeansCount = mbscgetMBeansCount();  Systemoutprintln(MBeansCount : + MBeansCountintValue());
  
  接下來查詢服務器上的MBeans顯示它們的屬性和操作檢索有關集群對象類型的MBeans細節就像下面的代碼展示的那樣在下一節我們會用MCJ看到同樣的集群細節
  
  Set MBeanset = mbscqueryMBeans(null null);  Systemoutprintln(MBeansetsize() : + MBeansetsize());  Iterator MBeansetIterator = erator();  while (MBeansetIteratorhasNext()) {   ObjectInstance objectInstance = (ObjectInstance)MBeansetIteratornext();   ObjectName objectName = objectInstancegetObjectName();   String canonicalName = objectNamegetCanonicalName();   Systemoutprintln(canonicalName : + canonicalName);   if (canonicalNameequals(Catalina:host=localhosttype=Cluster))   {     // Get details of cluster MBeans     Systemoutprintln(Cluster MBeans Details:);     Systemoutprintln(=========================================);     getMBeansDetails(canonicalName);   }   String canonicalKeyPropList = objectNamegetCanonicalKeyPropertyListString();  }
  
  最後關閉JMX MBeans連接並釋放資源
  
  connclose();
  
  Web應用示例安裝
  
  本節用一個Web應用示例來測試Tomcat集群的宕機(failover)和session復制我在兩個集群節點上部署Web應用還編寫了一個客戶端程序用來做在servlet容器裡創建和修改HTTP session的負載測試
  
  通過以下步驟啟動服務器集群及負載均衡
  
  啟動兩個服務器實例並啟用JMX監測功能
  
  啟動負載均衡我用的是Pen-一個簡單的基於TCP協議的負載均衡工具它基於一些算法來分配負載比如輪循算法能自動檢測到宕機的服務器並將客戶請求轉發到集群中其它可用的服務器上有關安裝和配置Pen的詳細情況參見Pen的網頁
  
  我用下面的命令啟動負載均衡負載分配算法選項用的是輪循算法
  
  pen r a f d localhost: : :
  
  其中
  
  r用輪循算法處理負載均衡
  a用ASCII碼打印傳入/傳出數據
  f前台方式運行
  d啟用Debug模式
  
  雙擊可執行文件(C:\dev\tools\mcj\MCJ Console bexe)啟動MCJ(注在這個應用示例中我在同一台機器上運行JMX客戶端和Tomcat集群但在真實的場景中JMX客戶端是在遠程機上運行而不是在應用服務器上)啟動後MCJ的控制台應該如圖所示
  
 

  
MCJ控制台窗口的截圖

  
  控制台啟動後創建一個新的連接綁定到JMX服務器上用Management菜單的Create Server Connection選項新建一個連接命名為Tomcatinstance該連接的設置如表所示
  
  表 MCJ的Tomcat連接設置
  
 

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

  
Tomcat集群MBeans的截圖

  
  用session管理MBeans檢查session細節顯示了HTTP session的詳細情況包括session數量活動session數和超時session數你還可以從日志文件中了解到session復制需要的時間
  

  
session細節的截圖

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