Docker 使用 Java VisualVM 监控 MeterSphere Docker 容器中的服务 JVM 信息

LTV · 2023年03月15日 · 最后由 LTV 回复于 2023年03月16日 · 6012 次阅读

周一在腾讯云开了一台 8C 16G 的服务器,如下所示:

  1. 下载安装 MeterSphere 2.7.1,导入 license,编辑/opt/metersphere/.env 文件,并将如下属性改成 true。
    MS_UI_ENABLED=true

  2. 保存.env 文件改动,然后执行 msctl reload,重新加载服务,然后执行 msctl status 查看服务状态,可以看到 UI-Test 容器已经启动。

  3. 编辑/opt/metersphere/docker-compose-ui-test.yml 文件,添加如下配置,并保存:
    JAVA_RMI_HOST: IP
    ports:

    • 1100:1100 1100 是 javaRMI 访问端口
  4. 执行 msctl reload,重新创建 UI-Test 容器。

  5. 在本地电脑 C:\Program Files\Java\jdk1.8.0_191\bin 目录下,找到 jvisualvm.exe,双击打开。

  6. 点击远程》添加远程主机,输入主机名或者主机 ip

  7. 右键主机名,并选择 “添加 JMX 连接”

  8. 输入 ip 和端口 1100,然后点击确定。

  9. 接下来就可以看到容器内 springboot 服务的 JVM 信息,如 CPU, 堆,MetaSpace, 线程等信息,也可以按照需要进行采样。

类似的方法流程,可以用来监控其它容器中的服务。
这里是因为 MeterSphere 的服务设置没有要求 authenticate,如果该选项为 yes,那就需要输入用户名和密码。
-Dpolyglot.js.nashorn-compat=true
-Dfile.encoding=utf-8
-Djava.awt.headless=true
--add-opens=java.base/jdk.internal.loader=ALL-UNNAMED
--add-opens=java.base/java.util=ALL-UNNAMED
-Dnashorn.args=--no-deprecation-warning
-Djava.rmi.server.hostname=124.221.121.xxx
-Dcom.sun.management.jmxremote.port=1100
-Dcom.sun.management.jmxremote.rmi.port=1100
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Xmx1638m
-XX:+ExitOnOutOfMemoryError

共收到 3 条回复 时间 点赞

是不是 java 栈的容器都可以这么操作?

LDX 回复

只要开了 rmi 端口就行,是不是容器无所谓,rmi 端口是 jvm 提供的,如果 Java 程序在容器内,需要把这个端口也暴露出来

LTV #3 · 2023年03月16日 Author

楼上正解

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册