一. 远程调试
1.1 为什么要使用远程调试?1.2 远程调试原理二. 配置IDEA远程调试Ambari-Server
2.1 在IDEA中配置远程服务器2.2 以Debug模式启动Ambari-Server2.3 在IDEA中链接Ambari-Server,追踪程序运行流程为了查看追踪Ambari-Server对Rest API的处理过程,在理解基本原理的前提下基于Ambari进行二次开发.
常规的方式有以下两种:
直接阅读源码
缺点: 晦涩难懂,很难抓住重点,效率低下
本地Debug
缺点: 因本地缺乏必要环境及配置,会直接报错.无法深入了解执行过程
基于此:采用Debug方式启动Ambari-Server,然后使用本地IDEA环境远程连接Ambari-Server,对Ambari-Server进行远程调试,追踪Ambari-Server的运行流程.
本机和远程主机的两个 VM 之间使用 Debug 协议通过 Socket 通信,传递调试指令和调试信息。
被调试程序的远程虚拟机: 作为 Debug 服务端,监听 Debug 调试指令。
调试程序的本地虚拟机: IDEA 中配置的 Remote Server,指定 Debug 服务器的Host:Port,以供 Debug 客户端程序连接。
注意事项:
被调试的服务器需要开启调试模式服务器端的代码和本地代码必须保持一致,否则会出现断点无法进入的问题。注: 我的IDEA版本为社区版的2020.2,不同版本之间操作可能有些许差别
点击OK按钮保存该配置.
这里可以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)来运行调试环境。正常连接服务器,进入调试后,在控制输出台输出信息如下:
点击Debugger进入调试,查看追踪Ambari-Server运行流程