远程调试:在端口 8787 上没有连接到 OpenJDK 11 上的 Wildfly 14
Remote debugging: No connection to Wildfly 14 on OpenJDK 11 at port 8787
我正在尝试将我的调试器连接到 Wildlfy 运行 打开 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,结果如下 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 2011 年 9 月 10 日有什么变化吗?使用 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
显然使用 OpenJDK11,调试端口现在默认绑定到本地主机。
原因在于根据this answer随Java9改变的默认行为:从Java9开始,JVM只接受本地连接,除非另有说明。
因此解决方案相当简单:
虽然 Java 8 足以启动 Wildfly --debug
,但 Java 9 我需要将其更改为 --debug *:8787
。
对于jdk 11,你应该使用
-agentlib:jdwp=transport=dt_socket,address=*:8787,server=y,suspend=n
相反。
在我的例子中,我在我的机器上使用 Java 8,但远程 Wildfly 实例是 运行 在 Java 11.
当我将 Java 版本更改为 11 时,它起作用了。
我正在尝试将我的调试器连接到 Wildlfy 运行 打开 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,结果如下 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 2011 年 9 月 10 日有什么变化吗?使用 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
显然使用 OpenJDK11,调试端口现在默认绑定到本地主机。
原因在于根据this answer随Java9改变的默认行为:从Java9开始,JVM只接受本地连接,除非另有说明。
因此解决方案相当简单:
虽然 Java 8 足以启动 Wildfly --debug
,但 Java 9 我需要将其更改为 --debug *:8787
。
对于jdk 11,你应该使用
-agentlib:jdwp=transport=dt_socket,address=*:8787,server=y,suspend=n
相反。
在我的例子中,我在我的机器上使用 Java 8,但远程 Wildfly 实例是 运行 在 Java 11.
当我将 Java 版本更改为 11 时,它起作用了。