How to access Spring-boot JMX remotely

前端 未结 3 530
礼貌的吻别
礼貌的吻别 2020-11-30 23:00

I know that spring automatically expose JMX beans. I was able to access it locally using VisualVM.

However on prod how I can connect to remotely to the app using it\

3条回答
  •  栀梦
    栀梦 (楼主)
    2020-11-30 23:43

    A tested approach on Java 1.8.0_71 and Spring Boot(1.3.3.RELEASE). Append below parameters to JVM arguments for monitored JVM.

    -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12348 -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.rmi.port=12349 -Dcom.sun.management.jmxremote.password.file=/somewhere/jmxremote.password -Dcom.sun.management.jmxremote.access.file=/somewhere/jmx/jmxremote.access
    

    The com.sun.management.jmxremote.port is used to define the fixed RMI registry port, and the com.sun.management.jmxremote.rmi.port is used to instruct JVM to use fixed RMI port, but NOT use random one.

    By setting this, I am able to connect JVM client from remote host to the monitored JVM via a firewall just opening 12348 and 12349 port.

    I tested using java -jar cmdline-jmxclient-0.10.3.jar user:pwd hostip:12348 on a remote machine, which generates below output(shortened just for demonstration).

    java.lang:type=Runtime
    java.lang:name=PS Scavenge,type=GarbageCollector
    Tomcat:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/,j2eeType=Filter,name=requestContextFilter
    java.nio:name=mapped,type=BufferPool
    Tomcat:host=localhost,type=Host
    java.lang:name=Compressed Class Space,type=MemoryPool
    .......
    

    The jar is downloaded from Here.

提交回复
热议问题