使用AdoptOpenJDK OpenJ9在Kubernetes上拒绝JMX连接



我的团队正试图将我们的微服务转移到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镜像。你有什么想法吗?

谢谢!

谨致问候。

我设法弄清楚为什么它不起作用。事实证明,为了将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。

谢谢!

相关内容

  • 没有找到相关文章

最新更新