java.lang.management.ManagementFactory cấp cho bạn quyền truy cập vào dữ liệu JMX.
i.g.
List<MemoryPoolMXBean> memPoolBeans = ManagementFactory.getMemoryPoolMXBeans();
for (MemoryPoolMXBean mpb : memPoolBeans) {
System.out.println("Memory Pool: " + mpb.getName());
}
Một số mẫu có sẵn tại SO truy vấn: [java] + managementfactory
Một đọc tốt: https://www.ibm.com/developerworks/library/j-jtp09196/index.html
Đối với thực hiện đầy đủ kết nối với một máy ảo từ xa:
Map<String,String[]> env = new HashMap<String, String[]>();
env.put(JMXConnector.CREDENTIALS, new String[]{"user","pass"});
JMXServiceURL address = new JMXServiceURL("service:rmi:///jndi/rmi://host:port/jmxrmi");
JMXConnector connector = JMXConnectorFactory.connect(address,env);
MBeanServerConnection mbs = connector.getMBeanServerConnection();
//get all mbeans
Set<ObjectInstance> beans = mbs.queryMBeans(null,null);
for(ObjectInstance instance : beans)
{
MBeanInfo info = mbs.getMBeanInfo(instance.getObjectName());
}
Từ thông tin, bạn có thể truy vấn tên đối tượng và thuộc tính như mong muốn.
Tính năng này hoạt động, nhưng có cách nào dễ dàng để nhận tất cả các giá trị từ tất cả các tên đối tượng không? Ngay bây giờ, có vẻ như tôi phải lấy na MBeanServerConnection, sau đó truy vấn từng giá trị riêng lẻ với mbs.getAttributes (..). Có cách nào tốt hơn? –
Được rồi, tôi có thể nhận được tất cả các ObjectNames với queryMBeans, nhưng tôi vẫn không thể tự động nhận tất cả các thuộc tính. –
: P. Bây giờ, tôi có thể truy vấn tất cả các thuộc tính, nhưng cách bạn làm điều đó cực kỳ mạch máu. Tôi sẽ chỉnh sửa câu trả lời của bạn và làm cho nó hoàn chỉnh hơn một chút, sau đó chấp nhận nó. –