Tomcat无法关闭

Rah*_*hul 27 debugging tomcat

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

JAVA_OPTS="$JAVA_OPTS -noverify -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
Run Code Online (Sandbox Code Playgroud)

每当我尝试关闭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)
Run Code Online (Sandbox Code Playgroud)

Jaa*_*aan 36

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

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

至少如果你已经在Linux上安装Tomcat的使用的软件包管理器,然后修改/etc/tomcat6/tomcat6.conf的CATALINA_OPTS变量(或您的发行任何路径)比直接改变catalina.sh脚本,包管理器清洗剂假设用户只改变配置文件,并打破这个假设升级Tomcat的包(如丢失设置,因为catalina.sh文件被覆盖)时,可能会出现问题.

我认为一个人应该更喜欢不仅JDWP但对于许多其他选项以及JAVA_OPTS CATALINA_OPTS:例如,如果一个使用堆大小选项-Xmx ...那么这将是合理的,把它变成CATALINA_OPTS,作为"停止"命令不需要太多堆.


PHe*_*ath 29

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

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

您需要将调试args移动到运行并启动catalina.shtomcat的参数(in ),将它们直接放入JAVA_OPTS是您遇到的问题的原因.


Din*_*sha 7

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

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

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

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

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

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


Mer*_*ste 2

看来5005端口已经被使用了。使用netstat命令检查开放端口。

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