使用Java VisualVM监控远程服务器部署在Docker容器中的java项目

有时候程序内存溢出或者做压力测试的时候我们就需要监控我们的程序的运行状况,包括内存使用情况、CPU使用情况等等,Java VisualVM就是监控这些数据的一个很好的工具,它在JDK安装目录的bin目录下。
使用Java VisualVM监控远程服务器部署在Docker容器中的java项目
在打开这个工具之前,我们先对我们部署的java项目做一些配置。我这里是使用Docker-Compose对容器进行管理,所以我这里主要就是修改docker-compose.yml文件和docker容器的构建文件Dockerfile。
使用Java VisualVM监控远程服务器部署在Docker容器中的java项目
红框中的那一句就是为了使用Java VisualVM实现监控而多加的一行,这一行的目的是为了把容器内的1199端口挂载到宿主机的1199端口。
使用Java VisualVM监控远程服务器部署在Docker容器中的java项目
红框中的内容就是为了使用Java VisualVM实现监控而多加的内容。其中
-Djava.rmi.server.hostname指定宿主机的公网ip
-Dcom.sun.management.jmxremote.port用于Java VisualVM远程监控的端口
-Dcom.sun.management.jmxremote.rmi.port指定“用于Java VisualVM远程监控的端口”需要挂载到宿主机的哪个端口
-Dcom.sun.management.jmxremote.authenticate配置是否需要验证,如果true,则在使用Java VisualVM连接的时候需要你认证账号密码
-Dcom.sun.management.jmxremote.ssl不指定ssl
使用Java VisualVM监控远程服务器部署在Docker容器中的java项目
最后开放上面配置的1199端口,如果你的是阿里云服务器,就像我下图一样,在阿里云控制台配置安全组规则。别的云服务器安全策略配置方式可能不一样,有的可能是配置防火墙,反正目的就是向外开放1199端口。
使用Java VisualVM监控远程服务器部署在Docker容器中的java项目

修改好这两个文件之后重新构建你的容器,然后在你本地就可以远程监控你的Java程序了。
使用Java VisualVM监控远程服务器部署在Docker容器中的java项目
使用Java VisualVM监控远程服务器部署在Docker容器中的java项目
使用Java VisualVM监控远程服务器部署在Docker容器中的java项目
最后监控成功,如下图
使用Java VisualVM监控远程服务器部署在Docker容器中的java项目