在这篇文章中,我们将看到如何使用性能。:perf_events)一起火焰图。他们是用于生成函数的图形表示中被称为我们的软件的选择。gydF4y2Baraybetapp 是用在这里,但它可以扩展到任何软件你可以解决堆栈跟踪。gydF4y2Ba

在前进之前,谨慎的一个词。对于任何分析工具,gydF4y2Ba不gydF4y2Ba在生产中运行这个系统,除非你知道你在做什么。gydF4y2Ba

安装包需要gydF4y2Ba

为简单起见,我将使用命令CentOS 7,但事情都应该是相同的Debian-based发行版(gydF4y2Baapt-get安装linux工具- $ (uname - r)gydF4y2Ba而不是gydF4y2Ba百胜gydF4y2Ba命令是唯一不同的步骤)。gydF4y2Ba

安装性能,简单的问题:gydF4y2Ba

让火焰图项目:gydF4y2Ba

就是这样!我们是好去。gydF4y2Ba

获取样本gydF4y2Ba

火焰图是一种可视化数据,所以我们需要一些样品我们可以基地。有三种方式,我们可以这样做。(请注意,我们将使用gydF4y2Ba- pgydF4y2Ba国旗只捕获数据从我们的利益的过程,但是我们可以捕获数据从所有正在运行的流程如果需要)。gydF4y2Ba

1 -gydF4y2Ba只获取一组时间(10秒):gydF4y2Ba

2 -gydF4y2Ba捕捉到我们发送中断信号(ctrl - c):gydF4y2Ba

3 -gydF4y2Ba捕获整个一生的过程:gydF4y2Ba

或gydF4y2Ba

我们被迫捕获数据从所有流程第三变体在第一种情况下,因为它是不可能预先知道进程ID (PID)号码(与命令执行时,我们实际上是启动MySQL服务)。这种类型的命令方便当你想要准确的数据流程的开始,否则这是不可能的。gydF4y2Ba

在第二个变体,我们正在运行一个查询在一个正在运行MySQL服务,所以我们可以使用gydF4y2Ba- pgydF4y2Ba国旗来捕获数据服务器进程。这是非常方便的,如果你想捕捉数据的确切时刻工作正在运行,例如。gydF4y2Ba

准备样品gydF4y2Ba

初始捕获之后,我们将需要收集的数据“可读”。这是必要的,因为它存储在二进制格式gydF4y2Ba性能记录gydF4y2Ba。我们将使用:gydF4y2Ba

它将读取gydF4y2Baperf.datagydF4y2Ba默认情况下,这是相同的默认gydF4y2Ba性能记录gydF4y2Ba使用的输出文件。它可以被使用gydF4y2Ba-我gydF4y2Ba国旗,gydF4y2Ba- ogydF4y2Ba分别标记。gydF4y2Ba

现在我们将能够阅读生成的文本文件,它将在一个人类可读的形式。然而,当这样做,你会很快意识到为什么我们需要将所有这些数据聚合成一个更可理解的形式。gydF4y2Ba

生成火焰图gydF4y2Ba

我们可以做以下一行程序,通过管道的输出第一个第二个作为输入。因为我们没有添加gydF4y2BaFlameGraphgydF4y2Bagit文件夹路径,我们将需要使用完整路径。gydF4y2Ba

我们现在可以在任何浏览器打开svg文件并开始分析信息丰富的图表。gydF4y2Ba

它看起来怎样?gydF4y2Ba

作为一个例子,我将完整的命令,输出,和火焰的截屏图生成的过程使用数据捕获方法# 2。我们将运行一个gydF4y2Ba选择插入…gydF4y2Ba对数据库的查询,所以我们可以分析其执行。gydF4y2Ba

眼尖的读者会注意到我们在这里迈出第一步,加入步骤# 2和# 3通过管道(gydF4y2Ba|gydF4y2Ba)避免写作和阅读gydF4y2Baperf.scriptgydF4y2Ba输出文件。此外,有gydF4y2Ba时间gydF4y2Ba输出所以我们可以得到一个估计的工具生成的数据量(1分钟25秒~ 2 mb);当然,这将取决于许多因素,所以一撮盐,和测试在您自己的环境。gydF4y2Ba

结果火焰图是:gydF4y2Ba

性能和火焰图gydF4y2Ba

一个明显的候选人优化工作gydF4y2Bawrite_recordgydF4y2Ba:如果我们能让这个函数更快,有很多潜在的减少总执行时间(平方在左下角的蓝色,我们可以看到总共采集标本的~ 60%这个codepath)。在上一节下面我们链接到博客解释更多关于如何解释火焰图,但是现在,知道你可以鼠标函数名称和它将动态更改的信息显示在左下角。你也可以想象得更好有了以下指南:gydF4y2Ba

火焰图gydF4y2Ba

结论gydF4y2Ba

支持团队,我们使用这个程序在很多情况下,我们需要深入查看MySQL的执行,以及持续多长时间。通过这种方式,我们可以有一个更好的了解操作是在一个特定的工作负载并采取相应行动。这个过程可以用优化或故障排除和是一个非常强大的工具在我们的工具!众所周知,人类更擅长处理图像而不是文字,这工具利用透亮,在我看来。gydF4y2Ba

相关链接gydF4y2Ba

解释火焰图gydF4y2Ba(向下滚动到“火焰图解释”部分)gydF4y2Ba

火焰图201gydF4y2Ba由马科斯,一个伟大的研讨会,如果你想深入挖掘gydF4y2Ba

当然,gydF4y2Ba布伦丹·格雷格gydF4y2Ba(火焰图背后的主谋项目)甚至更多的信息gydF4y2Ba

2gydF4y2Ba评论gydF4y2Ba
最古老的gydF4y2Ba
最新的gydF4y2Ba 大多数投票gydF4y2Ba
内联反馈gydF4y2Ba
查看所有评论gydF4y2Ba
QdotgydF4y2Ba

好工作,保持良好的工作。gydF4y2Ba
好工作gydF4y2Ba