2014-12-16 2 views
6

프로그래밍 방식으로 새 Java 프로세스를 시작하고 동적으로 JMX 포트를 설정해야합니다. 그래서 대신하고 난 다음프로그래밍 방식으로 원격 jmx 모니터링을 활성화 할 수 있습니까?

System.setProperty("java.rmi.server.hostname", "127.0.0.1"); 
System.setProperty("com.sun.management.jmxremote", "true"); 
System.setProperty("com.sun.management.jmxremote.authenticate", "false"); 
System.setProperty("com.sun.management.jmxremote.ssl", "false"); 
System.setProperty("com.sun.management.jmxremote.port", "9995" ); 

을하고 싶지만 그것이 작동하지 않는이

-Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.port=9995 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false 

. 왜 그런가?

+0

IMHO 불가능합니다. – SMA

+1

이 [답변] (http://stackoverflow.com/questions/7276881/how-to-set-jmx-remote-port-system-environment-parameters-through-java-code-for-r)을 참조하십시오. 이것이 목표라면 [Java Attach API] (http://docs.oracle.com/javase/7/docs/technotes/guides/attach/index.html)를 사용하여 원격으로 JVM을 모니터 할 수 있습니다. – vsnyc

답변

9

코드가 호출 될 때까지 jmxremote 커넥터를 구성하지 못한 것입니다.

당신이해야 할 일은 자신의 rmi 레지스트리와 JMXConnectorServer를 만들어 rmi 호출을 수신하고이를 MBeanServer에 전달하는 것입니다.

private void createJmxConnectorServer() throws IOException { 
    LocateRegistry.createRegistry(1234); 
    MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); 
    JMXServiceURL url = new JMXServiceURL("service:jmx:rmi://localhost/jndi/rmi://localhost:1234/jmxrmi"); 
    JMXConnectorServer svr = JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs); 
    svr.start(); 
} 
+0

이 스 니펫을 보내 주셔서 감사합니다. 저를 위해 아주 잘 작동합니다. –

+0

내가 도왔습니다. – AutomatedMike

관련 문제