Tôi có một chương trình yêu cầu động (tức là tại thời gian chạy) mở một ổ cắm có sẵn và bắt đầu một tác nhân JMX trên đó. Các tham số JMX này đang được đặt bên trong mã Java và không thông qua dòng lệnh. Điều này hoạt động tốt. Sau đó nó là cần thiết để giám sát (tức là vấn đề lệnh JMX vv) thông qua Java Visual VM từ xaLàm thế nào để thiết lập thông số môi trường hệ thống cổng từ xa JMX thông qua mã java để theo dõi từ xa?
Các đại lý máy chủ RMI trong chương trình là trên dòng ra khỏi quản lý hộp mô tả tại: http://download.oracle.com/javase/6/docs/technotes/guides/management/agent.html
Câu hỏi đặt ra Tôi có thể được tóm tắt là: Làm thế nào các thuộc tính dòng lệnh như vậy có thể được đặt ở mức hệ thống thông qua mã Java, để có thể sử dụng lược tả từ xa?
-Dcom.sun.management.jmxremote.port=1234
Nếu thông số "jmxremote.port" và các thông số khác được đặt qua dòng lệnh, giám sát từ xa hoạt động tốt. Tôi đang cố gắng để tìm một cách để làm điều này thông qua Java và không thông qua dòng lệnh.
Chương trình không thể chỉ định cổng thông qua dòng lệnh vì cổng khả dụng mới phải được tìm ra tại thời gian chạy.
Quy trình cần theo dõi từ xa và hoạt động tốt tại địa phương. Nếu các thông số sau không được chỉ định tại dòng lệnh, Java Visual VM không kết nối với quy trình.
-Dcom.sun.management.jmxremote.port=1234
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=10.0.0.128
Tôi đã thử.
System.setProperty("com.sun.management.jmxremote.port",Integer.toString(port));
Đây là một trong những việc đầu tiên được thực hiện trong chương trình trước khi bắt đầu JMXConnectorServer. Thật không may nó không được công nhận. Chỉ các thuộc tính thời gian chạy (tức là được chỉ định thông qua dòng lệnh được công nhận cho kết nối JMX bởi Java Visual VM).
Cũng đi qua con đường đặc tính có thể được chiết xuất từ các lớp học tập java nhưng không thể đạt được như thế nào để theo dõi tài sản "com.sun.management.jmxremote.port ="
public static void setEnv(Map<String, String> newenv) throws Exception {
Class[] classes = Collections.class.getDeclaredClasses();
Map<String, String> env = System.getenv();
for(Class cl : classes) {
if("java.util.Collections$UnmodifiableMap".equals(cl.getName())) {
Field field = cl.getDeclaredField("m");
field.setAccessible(true);
Object obj = field.get(env);
Map<String, String> map = (Map<String, String>) obj;
//map.clear();
map.putAll(newenv);
}
}
}
Bất kỳ trợ giúp sẽ được đánh giá cao !
Bạn nên sửa câu hỏi ban đầu của bạn và bao gồm các mẫu mã mà bạn đã được đăng trong ý kiến. – Perception