2009-08-13 28 views
8

Tôi đang chạy ứng dụng khách/máy chủ bằng JBoss.Truy cập máy chủ MBean từ xa

Làm cách nào để kết nối với máy chủ MBM của JVM? Tôi muốn sử dụng MBM MemoryMX để theo dõi mức tiêu thụ bộ nhớ.

Tôi có thể kết nối với JBean MBeanServer bằng tra cứu JNDI nhưng MB.lang.MemoryMX MBean không được đăng ký với JBean MBeanServer.

EDIT: Yêu cầu dành cho truy cập có lập trình vào mức sử dụng bộ nhớ từ ứng dụng khách.

Trả lời

1

Bạn đã thử khởi chạy JConsole (là $JAVA_HOME/bin) để kết nối với máy chủ chưa? Bạn sẽ có thể xem số liệu thống kê bộ nhớ từ đó

+0

Vâng, đó là hoạt động. Nhưng tôi muốn truy cập có lập trình từ ứng dụng khách của tôi. Máy khách của tôi có thể kết nối với máy chủ JBoss JBoss, nhưng tôi không biết cách kết nối với máy chủ nền tảng MBean. – parkr

+0

Xin lỗi - không rõ câu hỏi của bạn rằng truy cập có lập trình là yêu cầu –

+1

Xin lỗi của tôi :) – parkr

4

Một ví dụ mã từ một bài báo của IBM: link

MBeanServerConnection serverConn; 

try { 
    //connect to a remote VM using JMX RMI 
    JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://<addr>"); 

    JMXConnector jmxConnector = JMXConnectorFactory.connect(url); 

    serverConn = jmxConnector.getMBeanServerConnection(); 

    ObjectName objName = new 
    ObjectName(ManagementFactory.RUNTIME_MXBEAN_NAME); 

    // Get standard attribute "VmVendor" 
    String vendor = 
    (String) serverConn.getAttribute(objName, "VmVendor"); 

} catch (...) { } 
15

Tôi đã viết một lớp như thế này:

import javax.management.remote.JMXServiceURL; 
import javax.management.MBeanAttributeInfo; 
import javax.management.MBeanInfo; 
import javax.management.MBeanServerConnection; 
import javax.management.ObjectName; 
import javax.management.remote.JMXConnector; 
import javax.management.remote.JMXConnectorFactory; 

public class JVMRuntimeClient 
{ 
    static void main(String[] args) throws Exception 
    { 
     if (args == null) 
    { 
     System.out.println("Usage: java JVMRuntimeClient HOST PORT"); 
    } 
    if(args.length < 2) 
    { 
     System.out.println("Usage: java JVMRuntimeClient HOST PORT"); 
    } 

    try 
    { 
     JMXServiceURL target = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://"+args[0]+":"+args[1]+"/jmxrmi"); 
     JMXConnector connector = JMXConnectorFactory.connect(target); 
     MBeanServerConnection remote = connector.getMBeanServerConnection(); 

     /** 
     * this is the part where you MUST know which MBean to get 
     * com.digitalscripter.search.statistics:name=requestStatistics,type=RequestStatistics 
     * YOURS WILL VARY! 
     */ 
     ObjectName bean = new ObjectName("com.digitalscripter.search.statistics:name=requestStatistics,type=RequestStatistics"); 

     MBeanInfo info = remote.getMBeanInfo(bean); 
     MBeanAttributeInfo[] attributes = info.getAttributes(); 
     for (MBeanAttributeInfo attr : attributes) 
     { 
      System.out.println(attr.getDescription() + " " + remote.getAttribute(bean,attr.getName())); 
     } 
     connector.close(); 
    } 
    catch(Exception e) 
    { 
     System.out.println(e.getMessage()); 
     System.exit(0); 
    } 
    } 
} 
+0

Chỉ cần có URL dịch vụ JMX được giải quyết * vấn đề * của tôi - cảm ơn! –