我的团队正试图将我们的微服务转移到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。
谢谢!