握手失败 - 在 Intellij 中调试 Solr 时连接过早关闭错误

Posted

技术标签:

【中文标题】握手失败 - 在 Intellij 中调试 Solr 时连接过早关闭错误【英文标题】:Handshake failed - connection prematurally closed error when debugging Solr in Intellij 【发布时间】:2015-08-31 17:23:19 【问题描述】:

所以我打算在 Intellij 社区版上调试我的 Solr 过滤器插件。在我使用此命令从命令提示符运行程序后

java -jar start.jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8983

我用这个配置启动了我的 Intellij 调试器:

Transport : socket
Debugger mode : attach
Host : localhost
Port : 8983

但是当我运行调试器时,我得到了这个错误:

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

知道如何解决这个问题吗?

【问题讨论】:

您是否尝试检查防火墙设置? 我已经解决了这个问题。我应该把“”放在参数上。但是谢谢 【参考方案1】:

它帮助了我,至少在 Intellij IDEA 中:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=0.0.0.0:5005

尝试添加ip0.0.0.0

【讨论】:

【参考方案2】:

我在 Docker 容器中使用 OpenJDK 11 时遇到此错误,将环境变量 JAVA_DEBUG_PORT 设置为“*:5005”对我有用。

【讨论】:

【参考方案3】:

我在尝试访问 Docker 容器上的调试端口时遇到了该错误。

如果您尝试访问 Docker 容器内的调试端口,请确保将端口指定为 *:5005

例如

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

这是自 Java 9 以来发生的变化。

见:REGRESSION: Remote debugging does not work on JDK 9

这不是错误。这是一种安全。

JDK-8041435 之前

如果您有一个具有 EXT 和 INT 接口的服务器并以地址 = 5900 启动 Java 进程,它将绑定到这两个接口并允许全世界的任何人连接到您的 Java 进程,除非您在防火墙上阻止它。

在 JDK-8041435 套接字传输之后尝试猜测 localhost 并仅绑定到 localhost。 IE。默认情况下,套接字传输仅在客户端和服务器位于同一台机器上时才有效。猜测正确的本地主机并非易事。因此,由于网络设置,同一机器配置在某些情况下可能无法正常工作。

您可以使用 *(星号)恢复旧的、不安全的行为 IE。 -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5900 应该完全像 JDK-8041435 之前一样工作

但建议尽可能明确指定要绑定的 ip 地址。

还有JDWP socket connector accept only local connections by default

JDWP 套接字连接器已更改为仅在代理命令行上未指定 IP 地址或主机名时才绑定到 localhost。星号 (*) 的主机名可用于实现旧行为,即将 JDWP 套接字连接器绑定到所有可用接口;这不安全,不推荐。

【讨论】:

【参考方案4】:

您忘记在java 命令行上指定-Xdebug

编辑:如

java -jar start.jar -Xdebug -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8983

【讨论】:

它与java版本有关。它对 Java >= 6 没有任何作用。请参阅这篇文章:***.com/questions/975271/…【参考方案5】:

应该是这样的,

java "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8983" -jar start.jar

现在可以使用了

【讨论】:

在 intelli j 2019.2.4 中,我无法编辑命令行参数。我该如何解决 ?我的命令行参数是 -> -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8787 并且我不断收到以下错误 -> 运行“测试”时出错:无法打开调试器端口(localhost:8787): java.io.IOException "握手失败 - 连接提前关闭" 以防万一它对某人有帮助,我在 android Studio(基于 Intellij)中突然出现了这个错误,而我根本没有接触构建配置。完全关闭并再次启动 IDE 后,错误消失的速度与它出现时一样快。 对于在 Intelli IDEA 中更新命令行时遇到问题的人,你不应该更新 IntelliJ IDEA 本身的值。如果您正在使用远程应用程序的 tomcat 或 java-options 或命令行参数,则需要从 IntelliJ idea 中复制此值并将其添加到 tomcat 中的 java-options 中。

以上是关于握手失败 - 在 Intellij 中调试 Solr 时连接过早关闭错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Solana 程序部署失败后,如何恢复用于出租的 SOL?

SSL 握手失败 - 一个威瑞信链证书 - 包含两个 CA 签名证书和一个自签名证书

在 IntelliJ 中,如何调试 Maven 测试目标?

从 IntelliJ 调试 Eclipse Wildfly

Sol-verifier 构造函数参数 - 失败 - 无法验证

无法在 Intellij 中调试 android 应用程序:“警告:调试信息可能不可用。”