Open JDK 11で実行されているWildlfyにデバッガを接続しようとしています。
Wildflyによれば:
_
Listening for transport dt_socket at address: 8787
_
My 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で何か変更がありましたか?.
Telnetを使用すると、ポート_8787
_に実際に到達できないことが確認できます。
更新 @ehsavoieのコメントを読んだ後:Wildflyを実行しているサーバーで_netstat -ln
_が表示されます:
_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 8では--debug
でWildflyを起動するだけで十分ですが、Java 9ではこれを--debug *:8787
に変更する必要がありました。
Jdk 11では、使用する必要があります
-agentlib:jdwp=transport=dt_socket,address=*:8787,server=y,suspend=n
代わりに。
私の場合、マシンでJava 8を使用していましたが、リモートWildflyインスタンスはJava 11。
Javaバージョンを11に変更したとき、うまくいきました。