VisualVM+jstatd JVM调优(一)远程查看docker中的springboot程序

1 篇文章 0 订阅
1 篇文章 0 订阅

环境准备

本文基于以下环境编写

  1. docker中的服务使用docker-compose启动
  2. docker中的服务基于openjdk8镜像启动
  3. 本机装有jdk,且jdk的bin目录下存在VisualVM
  4. 防火墙端口已开放

文件处理

jstatd.all.policy

grant codebase "file:/usr/local/openjdk-8/lib/tools.jar" {
 	permission java.security.AllPermission;
};

此文件暂存于远程机器宿主机中,在compose中进行挂载即可
我这里保存为 /home/docker/config/jvm/jstatd.all.policy

docker-compose.yml

使用command命令启动服务
映射policy文件到容器中,我这里放在jdk中
nohup后台启动jstatd进程,避免命令阻塞真正的应用启动

version: "3"
services:
  service_name:
    container_name: container_name
    image: openjdk:8
    network_mode: "host"
    volumes:
      - /home/docker/config/jvm/jstatd.all.policy:/usr/local/openjdk-8/bin/jstatd.all.policy
    command:
      - sh
      - -c
      - |
        nohup jstatd -J-Djava.security.policy=/usr/local/openjdk-8/bin/jstatd.all.policy -J-Djava.rmi.server.hostname=ip  -J-Djava.rmi.server.logCalls=true &
        java -Xms256m -Xmx256m -Dlogging.path=/workspace/logs -Dnamespace=pro -Dspring.profiles.active=pro -Dfile.encoding=utf-8 -jar /workspace/jar/demo-1.0.jar
jstatd 相关内容

nohup后台启动jstatd进程,避免命令阻塞真正的应用启动
-J-Djava.security.policy=刚刚创建的,挂载进容器的安全策略文件
-J-Djava.rmi.server.logCalls=是否打印日志,默认false
J-Djava.rmi.server.hostname=宿主机IP
-p 端口,不用等号,默认-p 1099

jstatd启动会使用两个端口,所以docker容器需要映射端口,但jstatd一个端口是1099,可以在启动是自定义,另一个端口为随机端口,不好做映射,所以这里的docker-compose.yml使用host网络模式

随机端口固定方式参考

服务启动

可以考虑先直接启动jstatd,查看日志,确定能在本机远程连上jstatd后,再切回后台启动,再启动真实服务,监控真实服务的数据

修改compose文件的command命令为

  command:
    - sh
    - -c
    - |
      jstatd -J-Djava.security.policy=/usr/local/openjdk-8/bin/jstatd.all.policy -J-Djava.rmi.server.hostname=ip  -J-Djava.rmi.server.logCalls=true
        

启动docker容器后,查看日志内容为:
在这里插入图片描述

端口开放

1099或你指定的jstatd端口需要开放防火墙

尝试连接

在本机尝试连接jstatd
启动VisualVM,点击远程,新建远程,输入你的远程主机IP,再右键主机IP,新建jstatd,尝试连接
在这里插入图片描述
在这里插入图片描述
可以看到连接请求已经到了jstatd,但是本机没有内容
这是因为jstatd的随机端口的防火墙还没开放
在宿主机中查看另一个端口号

netstat -lpnt | grep jstatd

在这里插入图片描述
我这里为45150,再去开放这个端口
可以发现,VisualVM成功脸上了服务器
在这里插入图片描述
这时我们再去后台启动jstatd,然后正常启动我们的应用
就可以在VisualVM中看到我们启动的服务进程
双击该应用,就可以查看到该进程的运行情况了

VisualVM GC插件

VisualVM提供了GC监控插件,可以装上查看GC情况,方便调优
在这里插入图片描述

总结

本文只介绍如何远程连接docker中的服务
具体如何使用VisualVM查看参数,如何进行调优
会在后续文章中解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值