如何在调试模式下运行Apache Tomcat 8?

10
我正在尝试以调试模式运行Apache Tomcat 8.0.21。
当我执行以下命令时:
sh catalina.sh jpda start

出现了这个错误。

错误信息

ERROR: Cannot load this JVM TI agent twice, check your java command line for duplicate jdwp options. Error occurred during initialization of VM agent library failed to init: jdwp

有人可以帮忙吗?


1
你在Java选项中也使用这个选项吗:-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y?如果是的话,就不需要使用jpda来启动tomcat(sh catalina.sh jpda start),可以直接启动它而不加jpda选项。 - Arnab Biswas
是的,我正在使用那个方法。 - Tharindu Ketipearachchi
请不要在启动Tomcat时使用jpda。 - Arnab Biswas
5个回答

10

要么

unset CATALINA_OPTS
unset JPDA_ADDRESS
unset JPDA_OPTS
unset JPDA_TRANSPORT

catalina.sh jpda start

或者

# in .bashrc, .profile etc.
export CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 -Djava.security.egd=file:/dev/urandom -Denv=dev -Xms1024M -Xmx2048M -XX:PermSize=256M -XX:MaxPermSize=768m"

# At your shell prompt
./startup.sh

解释

正如Arnab在评论中所说,如果您的shell配置包括提到jdpw的环境变量(例如CATALINA_OPTSJDPA_ADDRESSJPDA_OPTS),只需使用./startup.sh启动,就像您没有尝试进行远程调试一样,脚本将从您的环境变量中获取jdpw选项。

启动选项语法catalina.sh jpda start仅应在没有任何已指定远程调试端口的环境变量时使用。它旨在方便,但如果您之前已经配置了shell以支持java远程调试,则可能会混淆这两种替代方法。


8
你可以只需添加环境变量,然后像往常一样运行Tomcat。
在这种情况下,调试端口为8000。
export CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"

接下来启动Tomcat。

sh ./catalina.sh start

2

有一种替代方法,在'catalina.sh'中推荐使用:

“不要在此脚本中设置变量。相反,将它们放入CATALINA_BASE/bin目录下的脚本setenv.sh中,以保持自定义分离。”

对于Windows,带环境变量的文件名将为'setenv.bat'。


2

我曾经遇到过这样的问题,当我尝试添加调试参数(-Xdebug -agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y)以便在启动时暂停Tomcat时,使用Eclipse时发生了这种情况。

为什么会出现问题
当您以Debug模式启动Tomcat时,Eclipse本身会插入调试参数。当您在启动配置中拥有自己的调试参数时,您实际上是在传递它们两次。

因此,如果您需要从Eclipse中启动Tomcat并在启动时暂停它(以便可以使用调试器进行连接),您需要:
- 将调试参数添加到启动配置的“Arguments -> VM arguments”框中,
- 然后运行此配置,而不是调试。
这样,只会添加来自启动配置的调试参数。


0

谢谢Dimitar II先生
已验证此方法完美运行,并在运行startup.bat时自动使用
文件:setenv.bat

@echo off
rem The proper way to set environment up for running Catalina
set "CATALINA_OPTS=-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接