JDAP是一种非常有用的Java远程调试技术
程序支持以JPDA方式启动的附件参数如下:
-Xdebug -Xrunjdwp:transport=[color=blue]dt_socket[/color],address=[color=blue]8000[/color],server=y,suspend=n
调试kafka server需要一般都需要远程调试;所以启动kafka服务的时候,需要开启jvm的jpda
通过分析kafka的启动脚本
kafka-run-class.sh
发现kafka已经支持jpda启动
# Set Debug options if enabled
if [ "x$KAFKA_DEBUG" != "x" ]; then
# Use default ports
DEFAULT_JAVA_DEBUG_PORT="9898"
if [ -z "$JAVA_DEBUG_PORT" ]; then
JAVA_DEBUG_PORT="$DEFAULT_JAVA_DEBUG_PORT"
fi
# Use the defaults if JAVA_DEBUG_OPTS was not set
DEFAULT_JAVA_DEBUG_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=${DEBUG_SUSPEND_FLAG:-n},address=$JAVA_DEBUG_PORT"
if [ -z "$JAVA_DEBUG_OPTS" ]; then
JAVA_DEBUG_OPTS="$DEFAULT_JAVA_DEBUG_OPTS"
fi
echo "Enabling Java debug options: $JAVA_DEBUG_OPTS"
KAFKA_OPTS="$JAVA_DEBUG_OPTS $KAFKA_OPTS"
fi
if条件可以看出只要设置KAFKA_DEBUG的值就可开启jpda启动
所以可以修改启动脚本或者直接设置变量:
export KAFKA_DEBUG=“Y”
完成kafka jpda启动。就可以愉快的远程锻炼调试了
以idea为例,直接增加remote
然后debug启动连接就可以啦