最近在使用arthas診斷工具, 診斷java服務的一些問題, 突然想到能不能使用arthas診斷flink的jobManager和taskManager呢? 答案是可以的.
采用javaagent, 在flink啟動jobmanager和taskManager的時候, 注入我們的agent
官方檔案
下載tunnel-server的jar包
使用的是Arthas Tunnel方式.
第一步: 先啟動一個 tunnel-server服務,
在服務器:10.0.16.1 執行
java -jar -Dserver.port=4433 -Darthas.server.port=7766 arthas-tunnel-server-3.5.3-fatjar.jar
其中 -Dserver.port 指定web頁面訪問地址,-Darthas.server.port為監聽埠, 遠程的arthas-agent通過該埠連接
第二步,為flink程式在啟動時注入arthas-agent,
我們需要使用javaagent,
2.1 新建一個maven專案, 引入arthas-agent的依賴包
<dependency>
<groupId>com.taobao.arthas</groupId>
<artifactId>arthas-agent-attach</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>com.taobao.arthas</groupId>
<artifactId>arthas-packaging</artifactId>
<version>3.5.3</version>
</dependency>
2.2 撰寫AgentPremain類,并且創建
public static void premain(String agentArgs, Instrumentation inst){
//arthasConfigMap為配置引數
Map<String, String> arthasConfigMap = new HashMap<>();
arthasConfigMap.put("arthas.tunnelServer","ws://10.0.16.1:7766/ws");
arthasConfigMap.put("arthas.appName","flink:68480");
arthasConfigMap.put("arthas.httpPort","-1"); //表示不使用httpPort
arthasConfigMap.put("arthas.telnetPort","0"); //設定為0,表示自動獲取,防止出現埠占用
arthasConfigMap.put("arthas.agentId","xxxxxxxxxx"+uuidString);
//上述可以通過-D傳入, 比如下文的-Dagent.arthas-tunnelServer, 然后使用
//System.getProperty("agent.arthas-tunnelServer") 獲取, 相對更靈活
ArthasAgent arthasAgent = new ArthasAgent(arthasConfigMap, null, false, null);
arthasAgent.init();
}
2.3 將撰寫javaagent專案打好jar包 customize-arthas-agent-1.0.0.jar,
并且將jar包放入到yarn集群下的所有節點上, 比如目錄為/data/arthas/
2.4 在啟動flink時, 注入這部分命令-yD yarn.container-start-command-template="" 原始碼中有或者看我以往的文章
flink run -m yarn-cluster -ys 1 -ynm flink-yarn-name \
-yD state.checkpoints.dir=hdfs://clife/checkpoint/flink \
-yD state.savepoints.dir=hdfs://clife/checkpoint/flink \
-yjm 1G -ytm 2G -yqu default \
-yD execution.checkpointing.externalized-checkpoint-retention=RETAIN_ON_CANCELLATION \
-yD table.exec.source.idle-timeout=10s \
-yD yarn.tags=68480 \
-yD state.backend=rocksdb \
-yD state.backend.incremental=true \
-yD yarn.container-start-command-template="%java% %jvmmem% %jvmopts% %logging% \
-javaagent:/data/arthas/customize-arthas-agent-1.0.0.jar \
-Dagent.arthasEnabled=true -Dagent.arthas-appName=flink:68480 \
-Dagent.arthas-tunnelServer=ws://10.0.16.1:7766/ws \
%class% %args% %redirects%" \
-yD env.java.opts="-Dfile.encoding=UTF-8" \
-c xx.Main \
/xxx.jar
最后, 即可在頁面中連接arthas進行在線診斷了
我們改造了arthas部分代碼, 目前可以篩選出指定flink任務的arthas
如果web-console出現不能復制粘貼時, 可以使用ctrl+insert 或者 ctrl+shift+c 來復制選中, shift+insert 或者 ctrl+shift+v 來粘貼

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/299149.html
標籤:其他
上一篇:自我時間管理與時間意識
