当我执行以下命令时:
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
有人可以帮忙吗?
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
有人可以帮忙吗?
要么
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_OPTS
,JDPA_ADDRESS
,JPDA_OPTS
),只需使用./startup.sh
启动,就像您没有尝试进行远程调试一样,脚本将从您的环境变量中获取jdpw选项。
启动选项语法catalina.sh jpda start
仅应在没有任何已指定远程调试端口的环境变量时使用。它旨在方便,但如果您之前已经配置了shell以支持java远程调试,则可能会混淆这两种替代方法。
export CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"
接下来启动Tomcat。
sh ./catalina.sh start
有一种替代方法,在'catalina.sh'中推荐使用:
“不要在此脚本中设置变量。相反,将它们放入CATALINA_BASE/bin目录下的脚本setenv.sh中,以保持自定义分离。”
对于Windows,带环境变量的文件名将为'setenv.bat'。
我曾经遇到过这样的问题,当我尝试添加调试参数(-Xdebug -agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y)以便在启动时暂停Tomcat时,使用Eclipse时发生了这种情况。
为什么会出现问题
当您以Debug模式启动Tomcat时,Eclipse本身会插入调试参数。当您在启动配置中拥有自己的调试参数时,您实际上是在传递它们两次。
因此,如果您需要从Eclipse中启动Tomcat并在启动时暂停它(以便可以使用调试器进行连接),您需要:
- 将调试参数添加到启动配置的“Arguments -> VM arguments”框中,
- 然后运行此配置,而不是调试。
这样,只会添加来自启动配置的调试参数。
谢谢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"