如何生成 Flink 作业的交互式火焰图?

简介: Flink 是目前最流行的大数据及流式计算框架之一,用户可以使用 Java/Scala/Python 的 DataStream 接口或者标准 SQL 语言来快速实现一个分布式高可用的流式应用,通过内部的 Java JIT、off-heap 内存管理等技术优化性能,并且有完整的 Source、Sink、WebUI、Metrics 等功能集成,让 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 官网都还没有相关的使用教程。

1.jpg

实际上基于 JVM 的程序都可以使用这个工具,本文将基于 jvm-profiler 来介绍如何生成 Flink 作业的火焰图。

下载和编译 jvm-profiler

git clone git clone https://github.com/uber-common/jvm-profiler.gitmvn 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 里面打印如下:

2.jpg

因为已经注入 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 图片就可以看到火焰图信息。

3.jpg

总结

本文主要目的在于教大家如何利用 jvm-profiler 去生成 Flink 作业的运行火焰图,这样可以在遇到性能瓶颈问题的时候会很方便大家去定位问题,关于如何去读懂生成的火焰图,后面可以再分享系列文章。

 

原文链接
本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xxl-job分布式调度参数传递和调度⽇志配置

文章目录1. 参数传递2. 调度⽇志1. 参数传递 UI界⾯参数传递 String jobParam XxlJobHelper.getJobParam();2. 调度⽇志 执⾏⽇志打印 需要通过 “XxlJobHelper.log” 打印执⾏⽇志 执⾏结果 默认任务结果为 “成功” 状态,不需要主动设置 ⾃主设置任务结果&…

蚂蚁王旭:开源协作如何提升业界的安全?

简介: 开发者、组织、业界机构的共同努力,让开源项目和社区,乃至整个世界变得更加安全。 在前不久的上海外滩大会上,蚂蚁资深技术专家、Kata Containers创始人王旭向参会者分享了开源、开放协作与软件安全可信的话题,本…

顶级技术大咖,揭秘实时音视频开发的超级风口

2021年初因为Elon Musk“带货”而走红的音频社交App Clubhouse,又以肉眼可见的速度跌落神坛,下载量从2月的960 万/月跌至4月的92万/月。不过在5月,Clubhouse终于推出了安卓版,并表示接下来也会对所有用户开放。 另一边&#xff0c…

如何让一套代码适配所有iOS设备尺寸?

简介: 随着移动互联网设备和技术的发展,各种移动设备屏幕尺寸层出不穷,折叠屏、分屏、悬浮窗等等,面对越来越多样的屏幕,如果为每种尺寸单独进行适配,不仅费时费力,还会增加端侧代码的开发与维护…

1024,阿里云惊喜 “加油包” 让你 “猿” 力觉醒!

1024程序员节是广大程序员共同的节日,程序员就像是一个个1024以最核心、踏实、低调的功能模块,搭建起科技世界。 现如今,技术更新迭代越来越快,人类生活愈发便捷化、智能化。这背后自然离不开一批批程序员的默默耕耘与辛苦付出。…

​赠书 | 云游戏搭上 5G 快车,华为、腾讯争相布局

作者 | 林瑞杰 冯林 温向东 陈乐 等来源 | 大数据DT头图 | 下载于ICphoto伴随 5G 网络的部署和商用进程,云游戏作为 5G 技术在消费互联网领域的重要应用,受到了资本和社会的广泛关注。本文介绍了云游戏的基本概念和定义、云游戏的典型特征和分类、云游戏…

数据湖有新解!Apache Hudi 与 Apache Flink 集成

简介: 纵观大数据领域成熟、活跃、有生命力的框架,无一不是设计优雅,能与其他框架相互融合,彼此借力,各专所长。 作者:王祥虎(Apache Hudi 社区) Apache Hudi 是由 Uber 开发并开源…

显微镜下的大明内容_平凡故事展现炮火下人性光辉,李少红《解放·终局营救》创作全解...

【巨匠】至心至情,匠心独运尝试过大量的题材与类型后,在建国70周年的历史性时刻,李少红老师终于执导了自己的第一部战争电影《解放终局营救》。 有人说,这只是李少红题材创新的一个新方向;有人说,李少红是想…

MQTT在游戏运营发行中的实践

前言 在游戏生态中,主要包含游戏的研发方以及运营发行方。一款游戏的运行,分为研发和运营两个阶段。研发的主体有个人、独立工作室、游戏研发公司等; 游戏的研发主体专注于游戏内容的研发,对游戏的发行及运营往往在人力、财力上…

2021 火爆技术人朋友圈的实时音视频 RTC 你 Pick 了嘛?

5月27日20点,第 13 期「大咖来了」! CSDN 副总裁于邦旭、融云 CTO 任杰、即构科技副总裁刘莉,多方视角探讨 RTC 超级风口与机遇,还有众多精美礼品等你拿! 立即戳:https://live.csdn.net/room/csdnnews/cn…

SAE 的极致应用部署效率

简介: SAE 在应用创建、部署、重启过程中的效率优化。 作者 | 文俊 阿里巴巴云原生团队 本文整理自《Serverless 技术公开课》 作为 Serverless 平台,SAE 提供了应用全托管的服务,充分利用了云原生的技术红利,以容器作为应用载体…

独家下载!《Java工程师成神之路(基础篇)》

简介: 初学Java的你还在烦恼不知道怎么去学,学习什么内容吗?那么多的技术书籍是否已经让你无从下手?别急,来看这一份完整的Java学习路径。 复制该链接到浏览器完成下载或分享:https://developer.aliyun.com…

Gartner:2021全球安全和风险支出将超1500亿美元

编辑 | 宋 慧 作者 | Gartner投稿 头图 | 付费下载于东方IC 全球信息技术研究和顾问公司Gartner预测,2021年全球信息安全和风险管理技术与服务支出预计将增长12.4%,达到1504亿美元。2020年安全和风险管理支出增长率为6.4%。 Gartner分析师认为&#xf…

四年,如何从前端小白蜕变为前端技术专家?

作者简介:珑晴——淘系技术部前端技术专家,16 年校招实习转正进入的阿里,当时是在聚划算前端团队,随着业务变化一路从聚划算到天猫至今加入淘系技术部,负责日常活动营销的同时,也多次参与大促会场&互动…

Tomcat 一键启停脚本 linux

文章目录一、脚本开发1. 编写脚本2. 修改脚本3. 赋予权限二、脚本执行2.1. 启动tomact2.2. 查看tomact状态2.3. 停止tomact一、脚本开发 1. 编写脚本 vim start-tomcat.sh添加以下内容: #!/bin/bash# description: Tomcat start/stop/status script#Location of …

从 Storm 迁移到 Flink,美团外卖实时数仓建设实践

简介: 本文主要介绍一种通用的实时数仓构建的方法与实践。实时数仓以端到端低延迟、SQL 标准化、快速响应变化、数据统一为目标。 作者:朱良 本文主要介绍一种通用的实时数仓构建的方法与实践。实时数仓以端到端低延迟、SQL 标准化、快速响应变化、数据…

Arm发布移动端v9体系新架构,CPU、GPU、IP全囊括了!

2021年5月25日晚,Arm发布了针对移动端的Armv9体系新架构,除了公布首款全面计算(Total Compute)解决方案,Arm还发布了首批基于Armv9 架构的Cortex-A CPU,为消费电子视觉体验而设计的Mali-G GPU系列&#xff…

阿里 双11 同款,流量防卫兵 Sentinel go 源码解读

简介: 本文主要分析阿里巴巴集团开源的流量控制中间件 Sentinel,其原生支持了 Java/Go/C 等多种语言,本文仅仅分析其 Go 语言实现。下文如无特殊说明,sentinel 指代 Sentinel-Go。 作者 | 于雨 apache/dubbo-go 项目负责人 本文…

工业发展 安全护航 2021年工业互联网安全发展峰会成功召开

在数字化创新日益深入的背景下,工业互联网已经成为制造企业构建敏捷、弹性的基础架构的重要转型方向。但与此同时,安全风险与威胁向OT环境渗透,产生了额外的复杂性,对于关键业务与数据带来了严重威胁,构建工业互联网安…

基于 Flink + ClickHouse 打造轻量级点击流实时数仓

作者:LittleMagic Flink 和 ClickHouse 分别是实时计算和(近实时)OLAP 领域的翘楚,也是近些年非常火爆的开源框架,很多大厂都在将两者结合使用来构建各种用途的实时平台,效果很好。关于两者的优点就不再赘…