Apache DolphinScheduler征稿--如何针对源代码进行远程调试【以dolphinscheduler源码为例】
本文正在参与 “拥用源 – 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了
这样就可以针对感兴趣的代码进行单步调试,快速理解代码的执行逻辑。
相关文章
- Linux系统安装Apache 2.4.6
- PHPstudy用Apache的ab工具测试实例详解
- Mac 下安装Apache Flink
- 《PHP、MySQL和Apache入门经典(第5版)》一2.2 如何获取MySQL
- Apache Flink®生态所面临的机遇与挑战
- Apache Flink 进阶(一):Runtime 核心机制剖析
- apache kafka系列之server.properties配置文件参数说明
- Nginx和Apache共存环境下apache获得真实IP
- Apache多虚拟主机多版本PHP(5.2+5.3+5.4)共存运行配置全过程
- Apache安装配置管理
- Apache与weblogic整合实战(独家研究)
- apache开源项目--Apache Drill
- 在 Web 项目中应用 Apache Shiro