这里使用windows上JDK提供的java VisualVM来监控centos7上用docker部署的java项目的jvm
(1)我们使用Dockerfile部署的项目,只需要在Dockerfile中加入部分启动参数即可开启远程监控,完整的Dockerfile如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #基础镜像java FROM openjdk:8 #将jar包添加到容器中, ADD /histor-server-0.0.1-SNAPSHOT.jar // ##容器启动之后执行的命令 EXPOSE 8080 EXPOSE 9090 ENTRYPOINT ["java", "-jar", \ "-Xms2024m","-Xmx2024m", \ "-Xmn1024m", \ "-XX:+PrintGCDetails", \ "-XX:+PrintGCTimeStamps", \ "-XX:+HeapDumpOnOutOfMemoryError", \ "-XX:HeapDumpPath=/opt/infosec/cssp", \ "-Xloggc:/opt/infosec/cssp", \ "-Djava.rmi.server.hostname=10.7.35.12", \ "-Dcom.sun.management.jmxremote.rmi.port=9090", \ "-Dcom.sun.management.jmxremote=true", \ "-Dcom.sun.management.jmxremote.port=9090", \ "-Dcom.sun.management.jmxremote.authenticate=false", \ "-Dcom.sun.management.jmxremote.ssl=false", \ "-Dcom.sun.management.jmxremote.local.only=false", \ "/XXXX.jar"] |
(2)此时还需要在/etc/hosts 中加入你的主机名,不然启动容器会报错,如图加入了centos7主机名,每个人的主机名不同,须通过hostname命令查看。

(3)使用dockerfile构建好镜像后,启动时设置-p将9090端口映射到主机
1 | docker run -p 8080:8080 -p 9090:9090 ........ |
(4)开启防火墙的9090端口
1 2 | firewall-cmd --zone=public --add-port=9090/tcp --permanent firewall-cmd --reload |
(5)在VisualVm的远程下添加远程主机,输入IP,然后在远程主机中添加JMX连接。
