0
点赞
收藏
分享

微信扫一扫

详解tomcat远程调试配置

芒果六斤半 2021-09-28 阅读 82

远程调试应用场景:

以tomcat7.0.79为例:

startup.sh:

tomcat在bin目录中提供了该启动脚本,最后一行是:

exec "$PRGDIR"/"$EXECUTABLE" start "$@"

根据之前定义的变量,实际就是:

catalina.sh start $@

catalina.sh:

tomcat实际的启动脚本是catalina.sh,进入catalina.sh中可以看到这样一段:

if [ "$1" = "jpda" ] ; then
  if [ -z "$JPDA_TRANSPORT" ]; then
    JPDA_TRANSPORT="dt_socket"
  fi
  if [ -z "$JPDA_ADDRESS" ]; then
    JPDA_ADDRESS="8000"
  fi
  if [ -z "$JPDA_SUSPEND" ]; then
    JPDA_SUSPEND="n"
  fi
  if [ -z "$JPDA_OPTS" ]; then
    JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
  fi
  CATALINA_OPTS="$JPDA_OPTS $CATALINA_OPTS"
  shift
fi

如果第一个参数是jpda的话,则会在CATALINA_OPTS中额外加上这些启动参数:

agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND

这几个参数的意思不细说了,可以google。

最终tomcat启动时的jvm参数是JAVA_OPTSCATALINA_OPTS


总结:

所以最简单的开启远程调试的方式就是修改startup.sh的最后一行:

exec "$PRGDIR"/"$EXECUTABLE" jpda start "$@"

jpda参数都用默认值,想要修改参数就可以根据自己喜好在startup.sh中export参数,或者在catalina.sh中直接指定。

为了统一管理tomcat的额外启动参数,我仿照公司的配置,直接在startup.sh中指定了参数(如上文所说catalina.sh中最后启动tomcat的参数是JAVA_OPTSCATALINA_OPTS):

export JAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=127.0.0.1:9000"

TIPS:

address默认的是8000,这样会不安全,来自任意ip的8000端口都可以访问,所以我设置为127.0.0.1:9000,只有本机的9000端口才可以访问。如果别的机器想要远程调试,可以socat TCP4-LISTEN:9001,fork,range=xxx/32 TCP4:127.0.0.1:9000,xxx填写别的机器ip,别的机器连接9001端口,然后转发到9000。至于使用idea还是eclipse设置远程调试就可以直接百度了。

至于-Xdebug -Xrunjdwp-agentlib这两种配置方式,主要是jdk版本问题,老版本用第一种,新版本用第二种(第一种也兼容),可以参考这篇文章

举报

相关推荐

0 条评论