中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何生成Flink作業的交互式火焰圖

發布時間:2021-12-22 15:14:27 來源:億速云 閱讀:164 作者:柒染 欄目:大數據

本篇文章為大家展示了如何生成Flink作業的交互式火焰圖,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

前言

Flink 是目前最流行的大數據及流式計算框架之一,用戶可以使用 Java/Scala/Python 的 DataStream 接口或者標準 SQL 語言來快速實現一個分布式高可用的流式應用,通過內部的 Java JIT、off-heap 內存管理等技術優化性能,并且有完整的 Source、Sink、WebUI、Metrics 等功能集成,讓 Flink 幾乎成為了流式計算的事實標準。

但是當處理海量數據的時候,很容易出現各種異常和性能瓶頸,這時我們需要優化系統性能時,常常需要分析程序運行行為和性能瓶頸。Profiling 技術是一種在應用運行時收集程序相關信息的動態分析手段,常用的 JVM Profiler 可以從多個方面對程序進行動態分析,如 CPU、Memory、Thread、Classes、GC 等,其中 CPU Profiling 的應用最為廣泛。CPU Profiling 經常被用于分析代碼的執行熱點,如“哪個方法占用 CPU 的執行時間最長”、“每個方法占用 CPU 的比例是多少”等等,通過 CPU Profiling 得到上述相關信息后,研發人員就可以輕松針對熱點瓶頸進行分析和性能優化,進而突破性能瓶頸,大幅提升系統的吞吐量。

下面介紹我們在做性能優化常用的火焰圖以及為如何集成火焰圖到通用的 Flink 作業中。

火焰圖介紹

火焰圖是《性能之巔》作者以及 DTrace 等一系列 Linux 系統優化工具作者 Brendan Gregg 大神的作品之一,可以非常清晰地展示應用程序的函數調用棧以及函數調用時間占比,基本原理是通過各種 agent 在程序運行時采樣并輸出日志,使用 FlameGraph 工具把日志提取出來輸出可在瀏覽器交互式查看的 SVG圖片。

Uber 開源了 jvm-profiler 項目,介紹如何為 Spark 應用和 Java 應用添加火焰圖支持,但是目前 Flink 社區和 jvm-profiler 官網都還沒有相關的使用教程。

如何生成Flink作業的交互式火焰圖

實際上基于 JVM 的程序都可以使用這個工具,本文將基于 jvm-profiler 來介紹如何生成 Flink 作業的火焰圖。

下載和編譯 jvm-profiler

git clone git clone https://github.com/uber-common/jvm-profiler.git

mvn clean install -DskipTests=true -Dcheckstyle.skip -Dfast -T 8C

編譯好了之后,將項目 target 目錄下的 jvm-profiler-1.0.0.jar 復制一份到 flink 的 lib 目錄下面。

cp target/jvm-profiler-1.0.0.jar /usr/local/flink-1.11.1/lib

下載 FlameGraph

由于 jvm-profiler 支持生成火焰圖需要的日志文件,將日志轉化成交互式 SVG 圖片還是使用 Brendan Gregg 的FlameGraph 工具。

git clone https://github.com/brendangregg/FlameGraph.git

下載項目源碼即可,后面會使用 flamegraph.pl 工具來生成圖片文件。

配置 Flink

對于 Flink 應用,我們只需要在 TaskManager 中注入打點的 Java agent 即可,這里測試,我就使用本地 standalone 模式,修改 Flink conf 目錄下的 flink-conf.yaml 文件,添加一下如下配置:

env.java.opts.taskmanager: "-javaagent:/usr/local/flink-1.11.1/lib/jvm-profiler-1.0.0.jar=sampleInterval=50"

目前最小的采樣間隔就是 50 毫秒,然后啟動集群和運行一個 Flink 作業:

./bin/start-cluster.sh


//運行一個作業
./bin/flink run ./examples/streaming/StateMachineExample.jar

運行之后可以看到 TaskManager 的 stdout 里面打印如下:

如何生成Flink作業的交互式火焰圖

因為已經注入 Java agent,因此在標準輸出中會定期添加火焰圖所需要的打點數據,然后使用下面的命令提取相關日志,并且使用 jvm-profiler 和 FlameGraph 提供的工具來生成 SVG 圖片文件。

//1、提取 stdout 文件中的相關日志

cat log/flink-zhisheng-taskexecutor-0-zhisheng.out | grep "ConsoleOutputReporter - Stacktrace:" | awk '{print substr($0,37)}' > stacktrace.json


//2、在 jvm-profiler 目錄下執行下面命令

python ./stackcollapse.py -i /usr/local/flink-1.11.1/stacktrace.json > stacktrace.folded


//3、在 FlameGraph 目錄下執行下面命令生成 SVG 圖片

./flamegraph.pl /Users/zhisheng/Documents/github/jvm-profiler/stacktrace.folded > stacktrace.svg

然后用瀏覽器打開剛才生成的 SVG 圖片就可以看到火焰圖信息。

如何生成Flink作業的交互式火焰圖

上述內容就是如何生成Flink作業的交互式火焰圖,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

连州市| 乡宁县| 石嘴山市| 琼海市| 湾仔区| 班玛县| 青冈县| 左权县| 亚东县| 海丰县| 瑞安市| 黎平县| 宁都县| 六盘水市| 肇东市| 都江堰市| 隆林| 扶沟县| 岳阳市| 长武县| 山西省| 大洼县| 泗洪县| 靖安县| 临湘市| 尉氏县| 永安市| 武平县| 辉南县| 伊金霍洛旗| 郸城县| 台州市| 平凉市| 华坪县| 临清市| 长治市| 祁连县| 兴化市| 嵩明县| 开化县| 兴海县|