【Flink】使用arthas在线诊断flink的那些事

x33g5p2x  于2022-08-17 转载在 Flink  
字(2.7k)|赞(0)|评价(0)|浏览(1071)

1.概述

转载:使用arthas在线诊断flink的那些事

最近在使用arthas诊断工具, 诊断java服务的一些问题, 突然想到能不能使用arthas诊断flink的jobManager和taskManager呢? 答案是可以的.
采用javaagent, 在flink启动jobmanager和taskManager的时候, 注入我们的agent

官方文档

下载tunnel-server的jar包

  1. 使用的是Arthas Tunnel方式.
  2. 第一步: 先启动一个 tunnel-server服务,
  3. 在服务器:10.0.16.1 执行
  4. java -jar -Dserver.port=4433 -Darthas.server.port=7766 arthas-tunnel-server-3.5.3-fatjar.jar
  5. 其中 -Dserver.port 指定web页面访问地址,-Darthas.server.port为监听端口, 远程的arthas-agent通过该端口连接
  6. 第二步,为flink程序在启动时注入arthas-agent,
  7. 我们需要使用javaagent,
  8. 2.1 新建一个maven项目, 引入arthas-agent的依赖包
  9. <dependency>
  10. <groupId>com.taobao.arthas</groupId>
  11. <artifactId>arthas-agent-attach</artifactId>
  12. <version>3.5.3</version>
  13. </dependency>
  14. <dependency>
  15. <groupId>com.taobao.arthas</groupId>
  16. <artifactId>arthas-packaging</artifactId>
  17. <version>3.5.3</version>
  18. </dependency>
  19. 2.2 编写AgentPremain类,并且创建
  20. public static void premain(String agentArgs, Instrumentation inst){
  21. //arthasConfigMap为配置参数
  22. Map<String, String> arthasConfigMap = new HashMap<>();
  23. arthasConfigMap.put("arthas.tunnelServer","ws://10.0.16.1:7766/ws");
  24. arthasConfigMap.put("arthas.appName","flink:68480");
  25. arthasConfigMap.put("arthas.httpPort","-1"); //表示不使用httpPort
  26. arthasConfigMap.put("arthas.telnetPort","0"); //设置为0,表示自动获取,防止出现端口占用
  27. arthasConfigMap.put("arthas.agentId","xxxxxxxxxx"+uuidString);
  28. //上述可以通过-D传入, 比如下文的-Dagent.arthas-tunnelServer, 然后使用
  29. //System.getProperty("agent.arthas-tunnelServer") 获取, 相对更灵活
  30. ArthasAgent arthasAgent = new ArthasAgent(arthasConfigMap, null, false, null);
  31. arthasAgent.init();
  32. }
  33. 2.3 将编写javaagent项目打好jar customize-arthas-agent-1.0.0.jar,
  34. 并且将jar包放入到yarn集群下的所有节点上, 比如目录为/data/arthas/
  35. 2.4 在启动flink时, 注入这部分命令-yD yarn.container-start-command-template="" 源码中有或者看我以往的文章
  36. flink run -m yarn-cluster -ys 1 -ynm flink-yarn-name \
  37. -yD state.checkpoints.dir=hdfs://clife/checkpoint/flink \
  38. -yD state.savepoints.dir=hdfs://clife/checkpoint/flink \
  39. -yjm 1G -ytm 2G -yqu default \
  40. -yD execution.checkpointing.externalized-checkpoint-retention=RETAIN_ON_CANCELLATION \
  41. -yD table.exec.source.idle-timeout=10s \
  42. -yD yarn.tags=68480 \
  43. -yD state.backend=rocksdb \
  44. -yD state.backend.incremental=true \
  45. -yD yarn.container-start-command-template="%java% %jvmmem% %jvmopts% %logging% \
  46. -javaagent:/data/arthas/customize-arthas-agent-1.0.0.jar \
  47. -Dagent.arthasEnabled=true -Dagent.arthas-appName=flink:68480 \
  48. -Dagent.arthas-tunnelServer=ws://10.0.16.1:7766/ws \
  49. %class% %args% %redirects%" \
  50. -yD env.java.opts="-Dfile.encoding=UTF-8" \
  51. -c xx.Main \
  52. /xxx.jar
  53. 最后, 即可在页面中连接arthas进行在线诊断了

我们改造了arthas部分代码, 目前可以筛选出指定flink任务的arthas
如果web-console出现不能复制粘贴时, 可以使用ctrl+insert 或者 ctrl+shift+c 来复制选中, shift+insert 或者 ctrl+shift+v 来粘贴

相关文章

最新文章

更多