【问题标题】:Transport dt_socket 8787 already in use传输 dt_socket 8787 已在使用中
【发布时间】:2013-09-10 21:05:26
【问题描述】:

我正在尝试在我的 Ubuntu 12.04 机器上的 Jetty 服务器中运行服务器和客户端应用程序。服务器启动没有任何问题,我使用了以下命令

$ mvn 码头:运行

在发出这个命令时,第一行是

在地址:8787 监听传输 dt_socket

但是当我启动客户端时出现以下错误

ERROR: transport error 202: bind failed: Address already in use
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [../../../src/share/back/debugInit.c:690]
FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)
Aborted

看起来与传输 dt_socket 有关。我不明白它是什么以及如何为客户使用另一个地址?

编辑 1

来自 pom.xml 客户端的 jetty-maven-plugin 看起来像这样

<build>
    <plugins>

      <!-- Specific jetty-maven-plugin configuration for running Jetty during
        development. None of its goals are run in a normal build lifecycle. -->
      <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>${jetty-maven-plugin.version}</version>
        <configuration>
          <webAppConfig>
            <contextPath>/</contextPath>
            <extraClasspath>${basedir}/src/test/resources/</extraClasspath>
          </webAppConfig>
          <connectors>
            <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
              <port>${servlet.port}</port>
              <host>0.0.0.0</host>
            </connector>
          </connectors>
          <reload>manual</reload>
          <useTestClasspath>true</useTestClasspath>
        </configuration>
      </plugin>
    </plugins>
  </build>

我的假设是某些 Jetty 以调试模式启动并尝试将调试器附加到端口 8787,该端口已绑定到服务器的调试器。

【问题讨论】:

  • 是否有可能之前的 jetty 实例已经在运行但可能崩溃了?因为它是 linux,你可以尝试 kill -9 ,然后你可以运行 ps aux | grep jetty 知道 pid
  • @OscarG 我必须在同一台机器上运行客户端和服务器,请参阅编辑后的问题。
  • 那么看起来您正在尝试启动两个在同一个端口上侦听的服务器实例,如果您正在运行客户端,它不需要开始侦听任何端口,而是连接到服务器在定义的端口上。我理解你的问题吗?
  • @OscarG 不,据我了解,它与 Java VM 有关。 docs.oracle.com/javase/1.4.2/docs/guide/jpda/conninv.html

标签: java maven jetty maven-jetty-plugin


【解决方案1】:

Jetty 不会自动启动调试器。您很可能已将 MAVEN_OPTS 环境变量设置为包含 -Xdebug 参数。检查'echo $MAVEN_OPTS',你会看到类似的东西:

-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n

您不能运行两个都尝试在端口 8787 上调试的 maven 进程。因此,请更改您的全局 MAVEN_OPTS(在 osx 上运行时在 .bash_profile 中)或更改您的第二个终端会话的 MAVEN_OPTS:

export MAVEN_OPTS="-Xmx1024m -XX:MaxPermSize=512M"

【讨论】:

  • 这正是发生在我身上的事情 - 有人给我发了他们的 MAVEN_OPTS 导出,我把它放在我的 .bash_profile 中,然后我无法启动多个 mvn:jetty。
【解决方案2】:

在终端/命令提示符中输入以下命令

killall -9 java

它会杀死所有的java进程。然后你就可以使用这个端口了。

【讨论】:

  • 为我工作,完美的答案。
【解决方案3】:

在 jetty 插件中试试这个配置

<configuration>
    <connectors>
        <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
            <port>9090</port>
        </connector>
    </connectors>
</configuration>

或者,以这种方式从命令行运行jetty

mvn -Djetty.port=9090 jetty:run

【讨论】:

  • 有趣,它应该根据文档工作 - docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin
  • pom.xml 已经配置了 Jetty 的 8084 端口。在我看来问题出在“JDWP Transport dt_socket”
  • 您是否尝试远程调试 Jetty?如果是,您的命令看起来如何?
  • 编辑了问题,看看我是否能够更好地解释问题。
  • 好的,我猜你在同一个端口上运行两台服务器,所以你应该更改其中一台的端口号
猜你喜欢
  • 2019-10-10
  • 1970-01-01
  • 1970-01-01
  • 2016-08-04
  • 2017-05-14
  • 2021-06-16
  • 1970-01-01
  • 2014-11-11
  • 1970-01-01
相关资源
最近更新 更多