zl程序教程

您现在的位置是:首页 >  工具

当前栏目

Apache DolphinScheduler征稿--如何针对源代码进行远程调试【以dolphinscheduler源码为例】

Apache调试源码 如何 远程 -- 进行 源代码
2023-09-11 14:16:24 时间

本文正在参与 “拥用源 – Apache DolphinScheduler有奖征稿活动”
海豚调度dolphinscheduler目前是 Apache 顶级项目,作为国内优秀的开源项目,它的架构设计理念会有很多值得我们学习和借鉴。

海豚调度dolphinscheduler是分布式易扩展的可视化DAG工作流任务调度系统

本文会包含如下内容:

  • 如何针对源代码进行调试
  • 如何调试dolphinscheduler的监控中心服务

本篇文章适合人群:架构师、技术专家以及对任务调度非常感兴趣的高级工程师

本文以海豚1.3.5的源代码,分析如何搭建调试环境。

1 远程调试

为了理解源代码的执行过程,节省无用的时间开销,在将源代码导入IDEA后,可以使用java的远程调试模式,在本地DEBUG服务器上代码。

主动连接调试:服务端配置监控端口,本地IDE连接远程监听端口进行调试,一般调试问题用这种方式。

1.1 服务端配置

在服务端的启动脚本中,增加:-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9996
以dolphinscheduler为例,在服务器上部署好dolphinscheduler,修改启动脚本dolphinscheduler-daemon.sh,在java命令后增加远程debug参数,示例如下图,修改后使用如下命令启动【分别是api-server,master-server的启动命令】:

 /opt/java/jdk1.8.0_191/bin/java -Dlogging.config=classpath:logback-api.xml -Dspring.profiles.active=api -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9996 -server -Xms1g -Xmx1g -Xmn500m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m  -Xss512k -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+PrintGCDetails -Xloggc:gc.log -XX:+HeapDumpOnOutOfMemoryError  -XX:HeapDumpPath=dump.hprof -classpath /data1/dolphinscheduler/scheduler/bin/../conf:/data1/dolphinscheduler/scheduler/bin/../lib/* org.apache.dolphinscheduler.api.ApiApplicationServer

 /data1/flink/jdk1.8.0_191/bin/java -Dlogging.config=classpath:logback-master.xml -Ddruid.mysql.usePingMethod=false -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9997 -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m  -Xss512k -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+PrintGCDetails -Xloggc:gc.log -XX:+HeapDumpOnOutOfMemoryError  -XX:HeapDumpPath=dump.hprof -classpath /data1/dolphinscheduler/scheduler/bin/../conf:/data1/dolphinscheduler/scheduler/bin/../lib/* org.apache.dolphinscheduler.server.master.MasterServer

在这里插入图片描述

1.2 IDE配置

在IDEA中,增加Debug Configruations,如下图:注意如下:

  • Use module classpath选择正确的程序,如dolphinscheduler-aip
  • 在host,port中输入正确的主机IP和端口,和服务端的配置要保持一致
  • 在2输入后,IDEA会自动在Command line arguments for remote JVM中增加远程DEBUG参数
     在这里插入图片描述

1.3 调试过程

1.3.1 使用命令行启动远程服务

如使用如下命令,启动dolphinscheduler的api-server

 /opt/java/jdk1.8.0_191/bin/java -Dlogging.config=classpath:logback-api.xml -Dspring.profiles.active=api -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9996 -server -Xms1g -Xmx1g -Xmn500m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m  -Xss512k -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+PrintGCDetails -Xloggc:gc.log -XX:+HeapDumpOnOutOfMemoryError  -XX:HeapDumpPath=dump.hprof -classpath /data1/dolphinscheduler/scheduler/bin/../conf:/data1/dolphinscheduler/scheduler/bin/../lib/* org.apache.dolphinscheduler.api.ApiApplicationServer

启动后在Listening for transport dt_socket at address: 9996处卡住, 如下图:
 在这里插入图片描述

1.3.2 在IDEA中debug

  • 在代码中添加适合的断点,如调试/dolphinscheduler/monitor/master/list服务,则在Map<String,
    Object> result = monitorService.queryMaster(loginUser);处添加断点
      
    在这里插入图片描述

  • 在IDEA中debug1.2中配置的debug configuration,如下图:

  在这里插入图片描述

  • 在api-server的swagger doc中,针对服务进行debug,如下图:
      在这里插入图片描述
  • IDEA中,代码在执行到断点处卡住,然后就可以进行Debug了
     在这里插入图片描述
    这样就可以针对感兴趣的代码进行单步调试,快速理解代码的执行逻辑。

本文正在参与 “拥用源 – Apache DolphinScheduler有奖征稿活动”