Tomcat无法关闭

时间:2009-07-08 07:44:13

标签: debugging tomcat

当我添加以下Java选项以启用调试时:

JAVA_OPTS="$JAVA_OPTS -noverify -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"

每当我尝试关闭tomcat时,我都会收到以下错误:

ERROR: transport error 202: bind failed: Address already in use ["transport.c",L41]
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) ["debugInit.c",L500]
JDWP exit error JVMTI_ERROR_INTERNAL(113): No transports initializedFATAL ERROR in native method: JDWP No transports initialized, jvmtiError=JVMTI_ERROR_INTERNAL(113)

7 个答案:

答案 0 :(得分:36)

谢谢你的简短解释,PHeath!根据您的建议,我发现解决问题的最佳方法是使用CATALINA_OPTS而不是JAVA_OPTS

查看catalina.sh,可以看到CATALINA_OPTS仅由“start”和“start-security”命令使用,而“stop”命令也使用JAVA_OPTS(至少在openSUSE上使用Tomcat 6.0.33) 12.1)。

至少如果您使用软件包管理器在Linux上安装了Tomcat,那么修改/etc/tomcat6/tomcat6.conf中的CATALINA_OPTS变量(或您的发行版中的任何路径)比直接更改catalina.sh脚本更简洁,包管理器假定用户只更改配置文件,并且在升级Tomcat包时可能会导致出现问题(例如,因为catalina.sh文件被覆盖而丢失设置)。

我认为人们应该更喜欢CATALINA_OPTS而不是JAVA_OPTS,不仅适用于JDWP,还适用于许多其他选项:e。 G。如果使用堆大小选项-Xmx ...那么将它放入CATALINA_OPTS是合理的,因为“stop”命令不需要太多堆。

答案 1 :(得分:28)

您正在尝试在启动时调试tomcat,因此当jvm启动时它会绑定到端口5005。

当你运行catalina.sh stop时,它会启动另一个jvm,它也会尝试绑定到端口5005。

您需要将调试参数移动到运行并启动tomcat的参数(在catalina.sh中),将它们直接放入JAVA_OPTS是导致问题的原因。

答案 2 :(得分:7)

问题是您的tomcat仍然在调试端口(5005)上运行,或者在同一端口(5005)上运行的其他服务。

如果tomcat仍在运行,你可以杀死它

  • 如果它在linux环境中 ps -ef | grep java ,并识别它的进程ID。并使用 sudo kill -9 终止进程。
  • 如果它在Windows环境中获得了任务管理器并杀死了tomcat和java进程。

现在你应该可以在没有任何问题的情况下以调试的方式启动服务器。

  

这可以通过已经通过maven执行的工具(eclipse)进行调试单元测试。除此之外,你可以流动相同的过程。

     

首先关闭Eclipse并杀死java进程并再次启动它。

答案 3 :(得分:2)

似乎端口5005已经在使用中。使用 netstat 命令检查打开的端口。

这可能是因为你已经打开了tomcat。检查您的流程。

答案 4 :(得分:2)

这是因为两个应用程序在调试模式下运行时都在监听相同的端口号,即8000。

一个快速的解决方案是在startup.bat

中将调试端口更改为8001

SET DEBUGPORT=8001

答案 5 :(得分:1)

看起来你正在启动调试器启动Tomcat,这会导致JVM附加到Process for Debugging,但是在catalina.sh中有一个case语句,用于启动,停止,重启等等。发出stop命令仍然会添加它,因为它是Global JAVA_OPTS的一部分,并尝试启动调试器在同一端口上侦听shutdown命令。如果从JAVA_OPTS中删除address = 50005或使用start jdpa命令通过调试器启动VM,这将解决您的问题。

如果需要干净的副本,请查看最新Tomcat发行版中的默认catalina.sh。听起来有人在你的内部进行了无效更改并导致JDPA在启动,停止和发出任何命令时运行。

答案 6 :(得分:0)

在catalina.bat中设置JPDA_ADDRESS = 8001,即调试端口 并更改server.xml中的所有3个端口