前言
java应用部署下在生产环境,肯定是少不了监控的,比如说我们想要监控JVM的线程使用情况,内存使用情况等等。这时候我们可以采用JMX来实现JVM监控,如果对JMX不熟悉,可以参见之前的
精通JVM监控,不知道JMX?
springboot服务启动JMX监控
当前java服务一般都是使用springboot框架来快速搭建的,我们要在服务中启动JMX监控改如何配置呢?其实服务内部不需要加任何配置或修改,在服务的启动脚本中增加JMX配置即可,下面看一个demo。
nohup /usr/bin/java -Xms2048m -Xmx2048m -Xss256k
-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m
-XX:+PrintHeapAtGC -XX:+PrintGCDateStamps
-Xloggc:$PRGDIR/log/gclogs.log
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=17099
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=17098
-jar test.jar --spring.profiles.active=devInteg >$PRGDIR/log/start.log 2>&1 &
上面demo中以Dcom开头的配置就是JMX相关的配置,由于这个demo之前在本地做性能测试配置的,所以不需要考虑安全性,就是未开启认证和SSL了。如果要考虑安全可以参考下面配置
java
-Djava.rmi.server.hostname=192.168.3.14
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=17099
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.password.file=/etc/java-6-openjdk/management/jmxremote.password
-Dcom.sun.management.jmxremote.access.file=/etc/java-6-openjdk/management/jmxremote.access
-Dcom.sun.management.jmxremote.ssl=true
-Djavax.net.ssl.keyStore=$YOUR_KEY_STORE
-Djavax.net.ssl.keyStorePassword=$YOUR_KEY_STORE_PASSWORD
-Djavax.net.ssl.trustStore=$YOUR_TRUST_STORE
-Djavax.net.ssl.trustStorePassword=$YOUR_TRUST_STORE_PASSWORD
-Dcom.sun.management.jmxremote.ssl.need.client.auth=true
-jar /usr/share/doc/openjdk-6-jre-headless/demo/jfc/Notepad/Notepad.jar
上面配置是在服务的启动脚本配置的,我们也可以在JDK的安装目录JRE_HOME/lib/management/management.properties中统一配置。
VisualVM连接JMX
直接在本地jdk的bin目录中的,启动VisualVM
启动之后,添加远程ip,选择添加JMX连接
连接成功之后
从上图可以看到CPU,内存的使用情况。VisualVM只是其中一种连接客户端,还可以通过Spring Boot Actuator、JConsole来连接。