IDE:intellij
在ambari-metrics-collector上找到start的运行脚本,再找到启动ambari-metrics-collector的java命令:
vi /var/lib/ambari-agent/cache/common-services/AMBARI_METRICS/0.1.0/package/scripts/metrics_collector.py
发现是执行 /usr/sbin/ambari-metrics-collector
这个脚本start的,那么编辑这个脚本找到java的启动server的命令,添加调试参数 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8081
:
vi /usr/sbin/ambari-metrics-collector
添加后如下所示:
nohup "${JAVA}" "-cp" "/usr/lib/ambari-metrics-collector/*:${COLLECTOR_CONF_DIR}" "${AMS_COLLECTOR_OPTS}" "-Djava.net.preferIPv4Stack=true" "-Dams.log.dir=${AMS_COLLECTOR_LOG_DIR}" "-Dproc_${DAEMON_NAME}" -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8081 "${CLASS}" "$@" > $OUTFILE 2>&1 &
这样,再在ambari serve 的web ui启动 Metrics Collector
,然后在IDE中编辑远程调试的configurations,写上对应的host和暴露的port。
双方就是通过填写的port进行通信,所以要注意之前port必须没有进程在占用。
设置断点,OK,可以调试了。