jdwp协议:
JDWP 是 Java Debug Wire Protocol 的缩写,它定义了调试器(debugger)和被调试的 Java 虚拟机(target vm)之间的通信协议。
Tomcat也支持该协议
https://www.ibm.com/developerworks/cn/java/j-lo-jpda3/
自带远程设置,无需修改starp.sh
catalina.sh配置
#remote debug
CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8899"
……
CATALINA_OPTS="$JPDA_OPTS $CATALINA_OPTS"
……
检查监控端口
#检查监控端口8899是否启动监听
[root@storm-nimbus-a opt]# netstat -nap | grep 8899
tcp 0 0 0.0.0.0:8899 0.0.0.0:* LISTEN 13452/java
远程调试演示
断开远程调试
自定义远程设置
catalina.sh配置
#remote debug 远程屏蔽
#CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE #-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8899"
……
if [ "$1" = "jpda" ] ; then
if [ -z "$JPDA_TRANSPORT" ]; then
JPDA_TRANSPORT="dt_socket"
fi
if [ -z "$JPDA_ADDRESS" ]; then
JPDA_ADDRESS="54321"
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
startup.sh配置
##修改前
exec "$PRGDIR"/"$EXECUTABLE" start "$@"
##修改后
exec "$PRGDIR"/"$EXECUTABLE" jpda start "$@"
检查监控端口
#检查监控端口54321是否启动监听
[root@storm-nimbus-a bin]# netstat -nap |grep 54321
tcp 0 0 0.0.0.0:54321 0.0.0.0:* LISTEN 15247/java
演示配置
演示效果同上
[root@storm-nimbus-a bin]# ps -ef |grep tomcat
…
-agentlib:jdwp=transport=dt_socket,address=54321,server=y,suspend=n
…
普通程序远程调试
演示脚本
[root@storm-nimbus-a opt]# java -agentlib:jdwp=transport=dt_socket,address=12345,server=y,suspend=n -jar Btrace.jar 123
演示配置