Java Management Extensions (JMX) 是 WebLogic 服務器管理的核心 API,通過 MBean 暴露運行時指標、配置屬性及操作接口。本文結合實際業務場景,詳解如何利用 JMX 監控 Servlet 性能、EJB 池狀態、JMS 吞吐量、JDBC 連接池等關鍵指標,並演示 weblogic.Admin 命令行工具的實戰技巧。
| 業務模塊 | 監控目標 | 關鍵 MBean 指標 |
|---|---|---|
| 靜態內容服務 | FileServlet 響應時間 | 服務耗時、HEAD 請求比例、客戶端緩存命中率 |
| 動態頁面 | Servlet 平均處理時間 | 請求完成數、平均耗時、錯誤率 |
| 註冊系統 | Entity Bean 緩存/池優化 | 緩存命中率、池大小、激活/釋放頻率 |
| 付費系統 | Stateless Session Bean 性能 | 並發調用數、外部服務響應時間、池利用率 |
| JMS 數據系統 | 消息吞吐量監控 | Topic/Queue 消息積壓、生產消費速率、持久化延遲 |
| JDBC 連接池 | 連接洩漏檢測與容量規劃 | 活躍連接數、等待線程數、洩漏堆棧追蹤、授權需求評估 |
獲取本地 MBeanHome 並查詢 JDBC 連接池運行時 MBean:
// 獲取本地 MBeanHome
MBeanHome home = (MBeanHome) new InitialContext()
.lookup(MBeanHome.LOCAL_JNDI_NAME);
// 獲取配置型 MBean(用於配置管理)
Set configPools = home.getMBeansByType("JDBCConnectionPool");
// 獲取運行時型 MBean(用於監控指標)
Set runtimePools = home.getMBeansByType("JDBCConnectionPoolRuntime");
// 關鍵監控指標提取
for (Object obj : runtimePools) {
JDBCConnectionPoolRuntimeMBean pool = (JDBCConnectionPoolRuntimeMBean) obj;
System.out.println("池名: " + pool.getName());
System.out.println("活躍連接: " + pool.getActiveConnectionsCurrentCount());
System.out.println("等待線程: " + pool.getWaitingForConnectionCurrentCount());
System.out.println("洩漏檢測: " + pool.getConnectionLeakProfile());
}
無需編寫 Java 代碼即可完成監控與配置操作:
# 查看所有 JDBC 連接池配置(格式化輸出)
java weblogic.Admin -username system -password [pwd] -url [url] \
GET -pretty -type JDBCConnectionPool
# 修改連接池最大容量(動態生效,重啟後失效除非持久化)
java weblogic.Admin -username system -password [pwd] -url [url] \
SET -type JDBCConnectionPool -property MaxCapacity -value 50
# 重置連接池(清理失效連接)
java weblogic.Admin -username system -password [pwd] -url [url] \
INVOKE -type JDBCConnectionPoolRuntime -method reset
# 服務器健康檢查
java weblogic.Admin -username system -password [pwd] -url [url] PING