生產環境監控 Web 服務器狀態(配置、記憶體、效能、部署應用),JMX 是標準切入點。本文提供 JBoss(RMIAdaptor + ObjectName 查詢)與 Jetty/Red5(JMXServiceURL + MBeanServerConnection)兩套完整連接與查詢代碼,涵蓋重試、超時、認證、異常處理等工程化細節。
// 1. 獲取 RMIAdaptor
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "jnp://host:port");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
InitialContext ic = new InitialContext(props);
RMIAdaptor adaptor = (RMIAdaptor) ic.lookup("jmx/rmi/RMIAdaptor");
// 2. 查詢 Server 版本
Set mbeans = adaptor.queryMBeans(new ObjectName("jboss.system:type=Server"), null);
for (ObjectInstance oi : mbeans) {
String version = adaptor.getAttribute(oi.getObjectName(), "Version").toString();
}
// 3. 列出所有 Web 應用
Set webApps = adaptor.queryMBeans(new ObjectName("jboss.web.deployment:*"), null);
String url = "service:jmx:rmi:///jndi/rmi://host:port/red5";
JMXServiceURL serviceUrl = new JMXServiceURL(url);
Map env = new HashMap<>();
env.put(JMXConnector.CREDENTIALS, new String[]{user, pass});
JMXConnector connector = JMXConnectorFactory.connect(serviceUrl, env);
MBeanServerConnection mbsc = connector.getMBeanServerConnection();
ObjectName name = new ObjectName("org.red5.server:type=org.red5.server.WebScope,name=admin");
MBeanInfo info = mbsc.getMBeanInfo(name);
for (MBeanAttributeInfo attr : info.getAttributes()) {
if ("Running".equals(attr.getName())) {
boolean running = (Boolean) mbsc.getAttribute(name, "Running");
}
}