web-dev-qa-db-ja.com

リモートデバッグ:OpenJDK 11のWildfly 14へのポート8787での接続なし

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にバインドされているようです。

14
Sebastian S

原因は、 この回答 に従ってJava 9で変更されたデフォルトの動作にあります。Java 9からは、特に指定がない限り、JVMはローカル接続のみを受け入れます。

したがって、解決策はかなり簡単です。

Java 8では--debugでWildflyを起動するだけで十分ですが、Java 9ではこれを--debug *:8787に変更する必要がありました。

16
Sebastian S

Jdk 11では、使用する必要があります

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

代わりに。

18
white.black

私の場合、マシンでJava 8を使用していましたが、リモートWildflyインスタンスはJava 11。

Javaバージョンを11に変更したとき、うまくいきました。

0
brunobastosg