0

我的团队正在尝试将我们的微服务迁移到 openj9,它们在 kubernetes 上运行。但是,我们在 JMX 的配置上遇到了问题。(openjdk8-openj9) 当我们尝试与 jvisualvm 的连接(以及与 Kubernetes 的端口转发)时,连接被拒绝。除了从 Hotspot 切换到 OpenJ9 之外,我们没有更改配置。

错误 :

E0312 17:09:46.286374   17160 portforward.go:400] an error occurred forwarding 1099 -> 1099: error forwarding port 1099 to pod XXXXXXX, uid : exit status 1: 2020/03/12 16:09:45 socat[31284] E connect(5, AF=2 127.0.0.1:1099, 16): Connection refused

我们使用的 java 选项:

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.local.only=false 
-Dcom.sun.management.jmxremote.port=1099 
-Dcom.sun.management.jmxremote.rmi.port=1099

我们使用的是最后一个采用openjdk/openjdk8-openj9 docker 镜像。你有什么想法?

谢谢 !

问候。

4

1 回答 1

1

我设法弄清楚为什么它不起作用。事实证明,为了将 JMX 选项传递给服务,我们在 YAML 中使用了 Kubernetes 服务描述符。它看起来像这样:

  - name: _JAVA_OPTIONS
        value:  -Dzipkinserver.listOfServers=http://zipkin:9411 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.rmi.port=1099

我意识到当应用程序没有在 docker 容器中使用 ENTRYPOINT 启动时,_JAVA_OPTIONS 没有考虑 JMX 属性。所以我像这样将属性直接传递到 Dockerfile 中并且它可以工作。

CMD ["java", "-Dcom.sun.management.jmxremote", "-Dcom.sun.management.jmxremote.authenticate=false", "-Dcom.sun.management.jmxremote.ssl=false", "-Dcom.sun.management.jmxremote.local.only=false", "-Dcom.sun.management.jmxremote.port=1099", "-Dcom.sun.management.jmxremote.rmi.port=1099", "-Djava.rmi.server.hostname=127.0.0.1", "-cp","app:app/lib/*","OurMainClass"]

也可以保留 _JAVA_OPTIONS 并在 dockerfile 中设置一个 ENTRYPOINT。

谢谢!

于 2020-03-13T15:45:35.563 回答