远程调试:在端口8787上未连接OpenJDK 11上的Wildfly 14

我正在尝试将调试器连接到在Open JDK 11上运行的Wildlfy。

尽管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 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确实无法访问。

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。

回答:

原因是根据此答案,Java 9更改了默认行为:从Java

9开始,除非另有说明,否则JVM仅接受本地连接。

由于Java 9.0,JDWP默认情况下仅支持本地连接。 http://www.oracle.com/technetwork/java/javase/9​​-notes-3745703.html#JDK-8041435

对于远程调试,应使用*:in地址运行程序:

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

因此,解决方案相当简单:

使用Java 8足以启动Wildfly --debug,而使用Java 9则需要将其更改为--debug *:8787

以上是 远程调试:在端口8787上未连接OpenJDK 11上的Wildfly 14 的全部内容, 来源链接: utcz.com/qa/422199.html

回到顶部