这里使用windows上JDK提供的java VisualVM来监控centos7上用docker部署的java项目的jvm
(1)我们使用Dockerfile部署的项目,只需要在Dockerfile中加入部分启动参数即可开启远程监控,完整的Dockerfile如下
#基础镜像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端口映射到主机
docker run -p 8080:8080 -p 9090:9090 ........
(4)开启防火墙的9090端口
firewall-cmd --zone=public --add-port=9090/tcp --permanent
firewall-cmd --reload
(5)在VisualVm的远程下添加远程主机,输入IP,然后在远程主机中添加JMX连接。