以編程的方式連接JMX代理 在探討如何用MC
J監測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服務器
以協議
主機名
遠程JMX端口號和憑證哈希表(存有用戶名和密碼)為參數創建JMXServiceURL對象
JMXServiceURL url = new JMXServiceURL(
service:jmx:rmi:///jndi/rmi://localhost:
/jmxrmi
); Map map = new HashMap(); String[] credentials = new String[] {
monitorRole
QED
}; map
put(
jmx
remote
credentials
credentials);
用第一步中得到的url和憑證哈希表創建JMXConnector對象
在獲得了JMX連接器的引用後
調用getConnectionId()方法來確保得到一個有效的連接ID:
JMXConnector conn = JMXnnect(url
map); System
out
println(
JMXConnector=
+conn
toString()); String id = conn
getConnectionId(); System
out
println(
Connection Id=
+ id);
接下來從JMXConnector對象中獲得MBeanserverConnection對象
mbsc = conn
getMBeanserverConnection(); String domains[] = mbsc
getDomains(); System
out
println(
# of domains=
+domains
length); for (int i =
; i < domains
length; i++) { System
out
println(
Domain[
+ i +
] =
+ domains[i]); }
在獲得MBeanserverConnection對象後
你就可以象調用連接到本地JMX服務器(在同一個JVM虛擬機上)的MBeanserver那樣調用MBeans有關的方法
你可以查看JMX服務器上域的數量和類型
還能獲取在該服務器上注冊的MBeans的數量
屬性及操作
下面的代碼片斷展示了這一過程
mbsc = conn
getMBeanserverConnection(); String domains[] = mbsc
getDomains(); System
out
println(
# of domains=
+domains
length); for (int i =
; i < domains
length; i++) { System
out
println(
Domain[
+ i +
] =
+ domains[i]); } // Get MBeans count Integer MBeansCount = mbsc
getMBeansCount(); System
out
println(
MBeansCount :
+ MBeansCount
intValue());
接下來查詢服務器上的MBeans
顯示它們的屬性和操作
檢索有關集群對象類型的MBeans細節
就像下面的代碼展示的那樣
在下一節我們會用MC
J看到同樣的集群細節
Set MBeanset = mbsc
queryMBeans(null
null); System
out
println(
MBeanset
size() :
+ MBeanset
size()); Iterator MBeansetIterator = erator(); 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(); }
最後關閉JMX MBeans連接並釋放資源
conn
close();
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\mc
j\MC
J Console
b
exe)啟動MC
J(注
在這個應用示例中
我在同一台機器上運行JMX客戶端和Tomcat集群
但在真實的場景中
JMX客戶端是在遠程機上運行
而不是在應用服務器上)
啟動後MC
J的控制台應該如圖
所示
圖 MCJ控制台窗口的截圖 控制台啟動後
創建一個新的連接綁定到JMX服務器上
用Management菜單的Create Server Connection選項新建一個連接
命名為Tomcat
instance
該連接的設置如表
所示
表
MC
J的Tomcat連接設置
注意
你需要在classPathEntries參數中指定catalina
jar
catalina
cluster
jar和 catalina
optional
jar文件(位於%CATALINA_HOME%\server\lib\目錄下)
當Tomcat服務器群啟用了遠程JMX
再將配置好的MC
J連接到這些服務器上
我們就可以運行java測試客戶端並用Log
J記錄sesion的詳細情況
在下一節我們將看到測量層的細節以及測試客戶端運行時的參數
測量層 我用多線程模式運行客戶端
並指定迭代的次數
每達到
次請求對session復制的詳細情況(如在集群中傳遞session發生變化以及處理請求花費的時間)做一個記錄
同時用JMX控制台對session細節進行監測
我們按以下步驟運行測試客戶端並監測服務器統計數據
運行客戶端
我用SessionReplicationClient仿真對Tomcat服務器群的負載測試
采用了以下設置
線程數
迭代次數
請求間隔
毫秒
測試樣本數量
用MC
J控制台監測集群元素
如圖
所示
你可以通過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控制台(MC
J)的幫助下從遠程監測Tomcat服務器(特別是集群和session復制模塊)
你會發現用J
SE
提供的JMX技術監測J
EE應用服務器(或者servlet容器)是多麼的方便和強大
使用JMX技術來監測和管理服務器
開發者
網管和運營部門都可以從中獲益
有了遠程JMX技術
開發者可以監測他們在服務器上的應用程序
發現J
EE應用中需要調整和優化的瓶頸
從而改善應用的性能和伸縮性
網管可以看到服務器的統計數字
如CPU使用率
線程數
內存使用率
以評估當前和未來的負載量需求
運營部門可以通過遠程JMX監測來檢查服務器狀態和閥值溢出警報
提前發現任何與服務器有關的問題
在使用JMX監測應用服務器時安全是另一個要考慮的重要因素
特別是在產品環境下
比如必須通過安全可控的方式(使用用戶名
密碼)訪問JMX控制台
只允許經過授權的用戶訪問
查看和修改MBeans的屬性和操作
系統管理員應當在服務器監測控制台上對MBeans屬性和操作級別的訪問進行細粒度的控制
還要將所有的基於JMX訪問用戶的活動記錄到日志文件中供以後的報告和審計之用
JMX客戶端為遠程綁定到各種應用服務器
監測服務器狀態以及運行於這些服務器之上的應用提供了一個集中的監測控制台
在企業對其所有的服務器和應用進行生命期管理方面
遠程JMX監測是個相當不錯的解決方案
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28311.html