Соединение JMX отказано в Kubernetes с AdoptOpenJDK OpenJ9 - PullRequest
0 голосов
/ 12 марта 2020

С моей командой мы пытаемся перевести наши микро-сервисы на 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

Мы используем последнее изображение accepttopenjdk / openjdk8-openj9 docker. У вас есть идеи?

Спасибо!

С уважением.

1 Ответ

1 голос
/ 13 марта 2020

Мне удалось выяснить, почему это не сработало. Оказывается, что для передачи опций JMX сервису мы использовали дескриптор сервиса Kubernetes в YAML. Это выглядит так:

  - 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

Я понял, что свойства JMX не были учтены в _JAVA_OPTIONS, когда приложение не запускается с ENTRYPOINT в контейнере docker. Поэтому я передаю свойства непосредственно в 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 и настроить ENTRYPOINT в файле Docker.

Спасибо!

...