开源性能可视化工具——FlameScope模式识别

FlameScope是一个新的开源性能可视化工具,它使用次秒级偏移热图和火焰图来分析周期活动、方差、扰动。我们在Netflix TechBlog上面,发表了技术文章Netflix FlameScope,以及工具的源代码。火焰图很好理解,次秒级偏移热图理解起来要困难些(我最近发明的它)。FlameScope可以该帮助你理解后者。

总而言之,次秒级偏移热图是这样的:x轴是一整秒,y轴是这一秒里的几分之一秒。这每个几分之一秒都被称作一个桶(或者说盒),表示这几分之一秒里,事件数量的聚合。盒子颜色深度表示发生的次数,颜色越深表示次数越多。

下图一个真实的CPU上的次秒级偏移热图样本:

这张图中能分析出什么信息来呢?为了能把各种不同模式区分开来展示,我在这篇文章里先画了一些人工合成的样本。实际使用FlameScope工具时,可以选择你的各个模式,还能生成火焰图,显示对应的代码路径(这里我不展示火焰图)。

周期活动

1 . 一个线程,每秒一次

线程在每秒钟内的同样的偏移里醒来,做几毫秒的工作,然后回到睡眠。

2 . 一个线程,两次每秒

每500ms唤醒一次。既可能是两个线程,也可能是一个线程500ms 唤醒一次。

3 . 两个线程

看起来像两个线程均1s唤醒一次

4 . 一个忙等待线程,每秒一次

这个线程做约20ms的工作,然后睡1s。这是一个常见的模式,导致每秒钟唤醒抵消匍匐前进。

5 . 一个忙等待线程,两次每秒

每500ms唤醒一次。有可能是单线程程序,每秒唤醒两次。

6 . 一个计算较密集的忙等线程

斜率高,每秒做更多的工作,大约是80毫秒。

7 . 一个计算较不密集的忙等线程

斜率低,每秒做的工作较少,可能只有几毫秒。

8 . 一个忙等待线程,每5秒钟唤醒一次

现在5秒唤醒一次。

我们可以根据夹角和唤醒的时间间隔,计算每个唤醒的CPU繁忙时间:
busy_time = (1000 ms / (热图行数 时间长度) tan(夹角)
例如45°夹角的线:
busy_time = (1000 ms / (501)) tan(45) = 20ms

方差

9 . cpu利用率100%

这是CPU完全被用满的样子

10 . cpu利用率50%

真实的工作负载更像是这样,是由短请求、随机到达组成的。

11 . cpu利用率25%

相同的工作负载类型,大小在25%。

12 . cpu利用率5%

相同的工作负载类型,大小在5%。

13 . 负载增加

在2分钟的尺度上,负载在变重。

14 . 变化的负荷

每30秒就有5秒的工作负载较重。

扰动

15 . CPU扰动

时不时地所有CPU都满载个100ms。(比如垃圾回收)

16 . CPU阻塞

时不时地所有CPU都空载个100ms。(比如等I/O)

17 . 单线程阻塞

时不时地,只有一个CPU没有idle(表现为粉红色长条,而不是白色长条)。(比如全局锁)

最后这个模式很有趣:它发生在一个当前运行的线程持有一把锁,而其它所有线程都阻塞在这把锁上。
那么该线程在做什么呢?点击FlameScope的粉色线,就能看到此时的火焰图。复杂的性能问题立刻变简单。

总结

你能从这张图中分析出什么结论?

实际使用FlameScope工具时,可以选择你的各个模式,还能生成火焰图,显示对应的代码路径。

我和同事Martin Spier(也是该工具的主开发人员)11月8日在LinkedIn性能meetup上发表演讲。

祝你使用FlameScope愉快,欢迎截图分享你遇到有趣的模式!

Brendan

实践

需要补充的是,作者最新的工作,将强大的Differential Flame Graph也集成到FlameScope中了,现在交互式地在FlameScope上,选择两个测试集以及对应的时间段,对比两个测试组的事件采样。

我在使用FlameScope时,发现并fix了FlameScope的若干bug。也包括Differential Flame Graph跑不起来的一些bug。之后我便用它来进行了一些性能问题的复现。还发现其中一些有趣的模式。

首先,我想分析两个测试组的调度特征。我对他们分别进行了perf sched record采样,并使用FlameScope进行了数据可视化。

性能好的分组 
客户端

服务端

性能差的分组
客户端

服务端


我们发现性能差的分组,有大量的调度事件,而且发生地非常均匀。性能好的分组则是周期性地繁忙工作若干毫秒(深红色长条),我们还能发现背景里有周期性的轻松任务(浅红色长条)

这个对比,给了我们这两个测试集的调度特征一个直观的感受。但看来分析问题需要借助更多的信息。

于是我使用了Differential Flame Graph分析两个测试集的完整调用栈上的采样。

该图便给出一个重要线索,两个测试集最重大的区别,在vfs_write->do_sync_write->sock_aio_write->inet_sendmsg->copy_user_enhanced_fast_string这条路径上。(注意由于内核编译优化等原因,调用路径略有不准确)

性能好的测试组,多调用了很多次copy_user_enhanced_fast_string,性能差测试组的则很少。

之后的工作便于FlameScope关系不大了。这便是我使用FlameScope工具进行测试和性能调优的一个实践。Bredan Gregg大神主导的这个软件,对性能数据阐释的直观性真的太强了~


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

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

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

相关文章

在腾讯云开通短信验证服务设置正确格式的签名和正文模板并完成群发消息测试

链接👉 https://blog.csdn.net/weixin_45001200/article/details/118878336?spm1001.2014.3001.5501 经历了一晚上的审核,终于在第二天近10点发来了测试验证码......

独家揭秘:阿里小程序的一云多端!看这篇就够了!

专家介绍 视频回放 https://yq.aliyun.com/live/1097 阿里小程序的一云多端 相信绝大部分同学知道阿里一云多端的项目,最早始于19年三月份在北京云栖大会上,阿里云的CEO在云栖大会上对外发布了一云多端的项目。 一云多端是什么? 大家今天常见都是微…

Docker 概念很难理解?一文搞定 Docker 端口绑定

作者 | Dieter Jordens译者 | 苏本如,责编 | 夕颜出品 | CSDN(ID:CSDNnews)以下为译文:作为初级开发人员的你,是不是参加过这样的面试,在面试中面试官希望你准确地回答Docker的工作原理?现今的面…

阿里云高级技术专家张毅萍:我眼中的边缘计算

边缘计算是目前公认的大方向,越来越多的边缘计算应用将随着5G建设的步伐而兴起。阿里云边缘计算团队的目标是在行业爆发来临之前,完成基础计算资源平台的构建,为产业提供基于体验的计算调度能力,进而助推整个产业快速应用发展。那…

docker 安装 mysql和Navicat Premium 远程连接

文章目录1. 安装mysql2. Navicat Premium 远程连接1. 安装mysql # 通过搜索镜像 docker search mysql# 拉取mysql镜像 docker pull mysql# 查看拉取的mysql镜像 docker images#创建MySQL容器 docker run -di --name mymysql -p 3306:3306 -e MYSQL_ROOT_PASSWORDroot mysql# 查…

牛客网SQL篇刷题篇(1-2)

https://www.nowcoder.com/ta/sql

阿里PB级Kubernetes日志平台建设实践

阿里PB级Kubernetes日志平台建设实践 QCon是由InfoQ主办的综合性技术盛会,每年在伦敦、北京、纽约、圣保罗、上海、旧金山召开。有幸参加这次QCon10周年大会,作为分享嘉宾在刘宇老师的运维专场发表了《阿里PB级Kubernetes日志平台建设实践》&#xff0c…

果断拿下4000万美元D轮融资,Rancher发力中国本土化与国产化!

2020年3月17日,业界应用广泛的Kubernetes管理平台创建者Rancher Labs(以下简称Rancher)宣布完成新一轮4000万美元D轮融资。 本轮融资由Telstra Ventures领投,既有投资者Mayfield、Nexus Venture Partners、国富绿景创投&#xff0…

MySQL 8.0 技术详解

MySQL 8.0 简介 MySQL 5.7 到 8.0,Oracle 官方跳跃了 Major Version 版本号,随之而来的就是在 MySQL 8.0 上做了许多重大更新,在往企业级数据库的路上大步前行,全新 Data Dictionary 设计,支持 Atomic DDL&#xff0c…

解决:Error response from daemon: manifest for xxx:latest not found: manifest unknown...

在使用docker 拉去最新的镜像时,会提示如下错误: 这里错误的意思是docker需要我们指定下载镜像的版本号。 但是我们想下载最新的版本号,该如何得知最新的版本号呢? 我们可以登录docker hub:https://hub.docker.com/…

牛客网SQL篇刷题篇(3-10)

https://www.nowcoder.com/ta/sql 1.inner join 和left join (1)在表中存在至少一个匹配时,INNER JOIN 关键字返回行。 SELECT *** FROM A INNER JOIN B ON 条件 注释:INNER JOIN 与 JOIN 是相同的。 (2&#…

技术三板斧:关于技术规划、管理、架构的思考

阿里妹导读:实践需要理论的指导,理论从实践中来。作为技术工程师,要不断地从事件中反思经验、总结规律,才能避免踏入同一个坑,才能更高效地完成 KPI ,甚至是晋升。今天的文章来自阿里巴巴高级技术专家毕啸&…

让服务器突破性能极限 阿里云神龙论文入选计算机顶会ASPLOS

疫情肆虐,全球多个科技领域盛会宣布改为线上举办,计算机领域顶会 ASPLOS也不例外。 日前,ASPLOS 2020公布了计算机界最新科技成果,其中包括阿里云提交的名为《High-density Multi-tenant Bare-metal Cloud》的论文,该…

自动化日志收集及分析在支付宝 App 内的演进

背景 结合《蚂蚁金服面对亿级并发场景的组件体系设计》,我们能够通盘了解支付宝移动端基础组件体系的构建之路和背后的思考,本文基于服务端组建体系的大背景下,着重探讨“自动化日志手机与分析”在支付宝 App 内的演进之路。 支付宝移动端技…

牛客网SQL篇刷题篇(16-23)

https://www.nowcoder.com/ta/sql 1.SQL嵌套查询 https://www.cnblogs.com/glassysky/p/11559082.html (1)什么是嵌套查询 .   嵌套查询的意思是,一个查询语句(select-from-where)查询语句块可以嵌套在另外一个查询块的where子句中&…

突破性能极限——阿里云神龙最新ASPLOS论文解读

作者 | 阿里云神龙团队责编 | 徐威龙封图| CSDN 下载于视觉中国日前,ASPLOS 2020公布了计算机界最新科技成果,其中包括阿里云提交的名为《High-density Multi-tenant Bare-metal Cloud》的论文,该论文阐述了阿里云自研的神龙服务器架构如何解…

1分钟 搭建xxl-job任务调度中心

文章目录一、前提环境1. 安装java环境2. 安装maven打包环境3. docker安装mysql二、搭建xxl-job 服务端(源码)三、搭建xxl-job 服务端(docker)四、常见异常解决方案4.1. docker中mysql容器的ip怎样获取?4.2. xxl-job 连…

Schedulerx2.0分布式计算原理最佳实践

1. 前言 Schedulerx2.0的客户端提供分布式执行、多种任务类型、统一日志等框架,用户只要依赖schedulerx-worker这个jar包,通过schedulerx2.0提供的编程模型,简单几行代码就能实现一套高可靠可运维的分布式执行引擎。 这篇文章重点是介绍基于…

一个优秀的可定制化Flutter相册组件,看这一篇就够了

背景 在做图片、视频相关功能的时候,相册是一个绕不开的话题,因为大家基本都有从相册获取图片或者视频的需求。最直接的方式是调用系统相册接口,基本功能是满足的,一些高级功能就不行了,例如自定义UI、多选图片等。 …

牛客网SQL篇刷题篇(24-31)

https://www.nowcoder.com/ta/sql 1.NOT IN NOT IN运算符允许从结果集中排除特定值的列表。 2.sql子查询 https://www.cnblogs.com/fzxey/p/10896244.html#where%E5%AD%90%E6%9F%A5%E8%AF%A2 子查询就是将一个查询(子查询)的结果作为另一个查询&…