文档目录
一. 远程调试
1.1 为什么要使用远程调试?
为了查看追踪Ambari-Server对Rest API的处理过程,在理解基本原理的前提下基于Ambari进行二次开发.
常规的方式有以下两种:
-
直接阅读源码
缺点: 晦涩难懂,很难抓住重点,效率低下
-
本地Debug
缺点: 因本地缺乏必要环境及配置,会直接报错.无法深入了解执行过程
基于此:采用Debug方式启动Ambari-Server,然后使用本地IDEA环境远程连接Ambari-Server,对Ambari-Server进行远程调试,追踪Ambari-Server的运行流程.
1.2 远程调试原理
本机和远程主机的两个 VM 之间使用 Debug 协议通过 Socket 通信,传递调试指令和调试信息。
被调试程序的远程虚拟机: 作为 Debug 服务端,监听 Debug 调试指令。
调试程序的本地虚拟机: IDEA 中配置的 Remote Server,指定 Debug 服务器的Host:Port,以供 Debug 客户端程序连接。
注意事项:
- 被调试的服务器需要开启调试模式
- 服务器端的代码和本地代码必须保持一致,否则会出现断点无法进入的问题。
二. 配置IDEA远程调试Ambari-Server
注: 我的IDEA版本为社区版的2020.2,不同版本之间操作可能有些许差别
2.1 在IDEA中配置远程服务器
- 在IDEA界面上方工具栏的文本框中,选择Edit Configurations…,如下图:
- 在弹出的Run/Debug Configurations对话框中,点击添加按钮,选择Remote
- 配置Remote,主要配置下图中红框标出的属性,包括:
Name
Host
Port
Use module classpath(此处应配置ambari源码的根目录)
点击OK按钮保存该配置.
2.2 以Debug模式启动Ambari-Server
这里可以Ambari-Server后端使用的数据库可以
选择MySQL数据库(推荐)或者默认的postgreSQL数据库
使用MySQL数据库,需要做进一步的配置,操作步骤如下:
# 拷贝mysql驱动
cp /usr/share/java/mysql-connector-java.jar /var/lib/ambari-server/resources/
# 编辑ambari.properties文件
vim /etc/ambari-server/conf/ambari.properties # 增加属性:server.jdbc.driver.path=/usr/share/java/mysql-connector-java.jar
使用如下命令Debug启动Ambari-Server
java -server -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=6666 \
-XX:NewRatio=3 -XX:+UseConcMarkSweepGC -XX:-UseGCOverheadLimit \
-XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled \
-Dsun.zip.disableMemoryMapping=true -Xms1012m -Xmx3048m \
-XX:MaxPermSize=256m-Djava.security.auth.login.config=/etc/ambari-server/conf/krb5JAASLogin.conf \
-Djava.security.krb5.conf=/etc/krb5.conf -Djavax.security.auth.useSubjectCredsOnly=false \
-cp /etc/ambari-server/conf:/usr/lib/ambari-server/*:/usr/share/java/mysql-connector-java.jar \
org.apache.ambari.server.controller.AmbariServer
注意:这里配置的端口号应与2.1部分配置的相对应
参数解释:
-Xdebug:通知JVM工作在调试模式下
-Xrunjdwp:通知JVM使用(java debug wire protocol)来运行调试环境。
2.3 在IDEA中链接Ambari-Server,追踪程序运行流程
- 在程序中相应位置打上断点
- 服务器启动后,工具栏界面点击小虫子按钮开启Debug
正常连接服务器,进入调试后,在控制输出台输出信息如下:
- 点击Debugger进入调试,查看追踪Ambari-Server运行流程