Удаленная отладка: нет соединения с Wildfly 14 на OpenJDK 11 через порт 8787

Я пытаюсь подключить мой отладчик к Wildlfy, работающему на Open JDK 11.

Несмотря на то, что Wildfly говорит:

Listening for transport dt_socket at address: 8787

Моя IDE (IntelliJ IDEA CE 2018.1) утверждает, что не подключается:

Unable to open debugger port (localhost:8787): java.io.IOException "handshake failed - connection prematurally closed".

Я standalone.sh --debug Wildfly через standalone.sh --debug приводит к следующему JAVA_OPTS:

-server
-Xms64m
-Xmx512m
-XX:MetaspaceSize=96M
-XX:MaxMetaspaceSize=256m
-Djava.net.preferIPv4Stack=true
-Djboss.modules.system.pkgs=org.jboss.byteman
-Djava.awt.headless=true
-agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n
--add-exports=java.base/sun.nio.ch=ALL-UNNAMED
--add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED
--add-exports=jdk.unsupported/sun.reflect=ALL-UNNAMED
--add-modules=java.se

Что-то изменилось в Java 9/10/11? Удаленная отладка с точно такой же настройкой прекрасно работает при использовании Oracle JDK 8.

Используя telnet, я могу подтвердить, что порт 8787 действительно недоступен.

Обновление после прочтения комментария @ehsavoie: netstat -ln на сервере под управлением Wildfly показывает:

Proto Recv-Q Send-Q Local Address           Foreign Address         State   
tcp        0      0 127.0.0.1:8787          0.0.0.0:*               LISTEN 

Таким образом, очевидно, что в OpenJDK 11 порт отладки теперь привязан к localhost по умолчанию.

Ответ 1

Причина заключается в поведении по умолчанию, которое изменилось в Java 9 в соответствии с этим ответом: Начиная с Java 9, JVM принимает только локальные соединения, если не указано иное.

Поэтому решение довольно просто:

В то время как с Java 8 достаточно запустить Wildfly с --debug, с Java 9 мне нужно было изменить это на --debug *:8787.

Ответ 2

Для JDK 11, вы должны использовать

-agentlib:jdwp=transport=dt_socket,address=*:8787,server=y,suspend=n

вместо.

Ответ 3

В моем случае я использовал Java 8 на своем компьютере, но удаленный экземпляр Wildfly работал на Java 11.

Когда я изменил свою версию Java на 11, это сработало.