解决ERROR:JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)

开发环境tomcat8.5 在某一次出现下面的错误。

  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 [debugInit.c:750]
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 [debugInit.c:750]

Listening for transport dt_socket at address: 60222

JDWP
  JDWP 协议介绍
  协议分析
  Packet 的结构
  JDWP 传输接口(Java Debug Wire Protocol Transport Interface)
  JDWP 的命令实现机制
  JDWP 的事件处理机制
  JPDA(Java Platform Debugger Architecture) 是 Java 平台调试体系结构的缩写,通过 JPDA 提供的 API,开发人员可以方便灵活的搭建 Java 调试应用程序。JPDA 主要由三个部分组成:Java 虚拟机工具接口(JVMTI),Java 调试线协议(JDWP),以及 Java 调试接口(JDI)

  其中常用的开发平台Eclipse中自带了JDWP兼容的调试器,命令行中常见的有jdb等

问题原因:
该故障是JVM远程debug存在的缺陷,只有在开启远程debug端口时才会出现;原因是由于接收到不符合JDWP协议的数据包,导致JVM崩溃。

要确认系统中是否存在该漏洞,可以检查java启动参数中是否有如下相关配置:

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

或者

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

而我的配置文件是这样的
CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=60222,suspend=n,server=y"

若存在相关配置,那就说明java启动了远程调试端口,就会存在该漏洞;此时JVM虚拟机作为调试的服务提供端,通过8787端口监听一个连接,而调试器通过该连接与虚拟机进行交互。

解决方案:
在Java环境配置变量里调整“java_opts=”即可

我的调整为:export JAVA_OPTS='-Dfile.encoding=UTF-8 -Djava.awt.headless=true -Xms2048m -Xmx2048m',即可解决。

https://blog.csdn.net/cicada688/article/details/8549031  这篇文章对这个错误介绍的更详细

本文参考:https://blog.csdn.net/lsbhjshyn/article/details/44037649

猜你喜欢

转载自blog.csdn.net/qq_39427835/article/details/80265663
今日推荐